iqm-benchmarks 2.18__tar.gz → 2.20__tar.gz

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

Potentially problematic release.


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

Files changed (99) hide show
  1. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/CHANGELOG.rst +9 -0
  2. {iqm_benchmarks-2.18/src/iqm_benchmarks.egg-info → iqm_benchmarks-2.20}/PKG-INFO +1 -1
  3. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/requirements.txt +3 -3
  4. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/__init__.py +2 -0
  5. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/quantum_volume/clops.py +15 -4
  6. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +22 -5
  7. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/readout_mitigation.py +12 -21
  8. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20/src/iqm_benchmarks.egg-info}/PKG-INFO +1 -1
  9. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/tests/test_ghz.py +15 -16
  10. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/tests/test_gst.py +13 -9
  11. iqm_benchmarks-2.20/tests/test_qscore.py +37 -0
  12. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/tests/test_qv.py +14 -10
  13. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/tests/test_rb.py +12 -9
  14. iqm_benchmarks-2.18/tests/test_qscore.py +0 -50
  15. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/.github/workflows/main.yml +0 -0
  16. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/.github/workflows/publish.yml +0 -0
  17. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/.github/workflows/tag_and_release.yml +0 -0
  18. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/.gitignore +0 -0
  19. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/LICENSE +0 -0
  20. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/MANIFEST.in +0 -0
  21. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/README.md +0 -0
  22. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/benchmark_runner.py +0 -0
  23. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docbuild +0 -0
  24. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/API.rst +0 -0
  25. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/Makefile +0 -0
  26. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/_static/images/favicon.ico +0 -0
  27. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/_static/images/logo.png +0 -0
  28. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/_templates/autosummary-class-template.rst +0 -0
  29. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/_templates/autosummary-module-template.rst +0 -0
  30. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/changelog.rst +0 -0
  31. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/conf.py +0 -0
  32. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/development/development.rst +0 -0
  33. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/development/generate_2qubit_cliffords.ipynb +0 -0
  34. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/development/how_to_make_your_own_benchmark.ipynb +0 -0
  35. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/devices/devices.rst +0 -0
  36. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/devices/spark.ipynb +0 -0
  37. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/devices/star.ipynb +0 -0
  38. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_clifford_rb.ipynb +0 -0
  39. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_clops.ipynb +0 -0
  40. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_experiment_all.ipynb +0 -0
  41. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_ghz.ipynb +0 -0
  42. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_ghz_deneb.ipynb +0 -0
  43. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_gst.ipynb +0 -0
  44. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_interleaved_rb.ipynb +0 -0
  45. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_mirror_rb.ipynb +0 -0
  46. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_qscore.ipynb +0 -0
  47. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_quantum_volume.ipynb +0 -0
  48. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/example_quantum_volume_deneb.ipynb +0 -0
  49. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/examples/examples.rst +0 -0
  50. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/index.rst +0 -0
  51. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/license.rst +0 -0
  52. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/docs/readme.md +0 -0
  53. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/format +0 -0
  54. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/pyproject.toml +0 -0
  55. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/scheduled_experiments/adonis/__init__.py +0 -0
  56. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/scheduled_experiments/adonis/weekly.py +0 -0
  57. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/setup.cfg +0 -0
  58. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/benchmark.py +0 -0
  59. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/benchmark_definition.py +0 -0
  60. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/circuit_containers.py +0 -0
  61. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/compressive_gst/__init__.py +0 -0
  62. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/compressive_gst/compressive_gst.py +0 -0
  63. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/compressive_gst/gst_analysis.py +0 -0
  64. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/entanglement/__init__.py +0 -0
  65. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/entanglement/ghz.py +0 -0
  66. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/logging_config.py +0 -0
  67. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/optimization/__init__.py +0 -0
  68. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/optimization/qscore.py +0 -0
  69. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/quantum_volume/__init__.py +0 -0
  70. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/quantum_volume/quantum_volume.py +0 -0
  71. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/__init__.py +0 -0
  72. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
  73. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
  74. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py +0 -0
  75. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py +0 -0
  76. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py +0 -0
  77. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py +0 -0
  78. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py +0 -0
  79. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py +0 -0
  80. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py +0 -0
  81. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm/benchmarks/utils.py +0 -0
  82. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm_benchmarks.egg-info/SOURCES.txt +0 -0
  83. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm_benchmarks.egg-info/dependency_links.txt +0 -0
  84. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm_benchmarks.egg-info/requires.txt +0 -0
  85. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/iqm_benchmarks.egg-info/top_level.txt +0 -0
  86. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/LICENSE +0 -0
  87. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/README.md +0 -0
  88. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/additional_fns.py +0 -0
  89. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/algorithm.py +0 -0
  90. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/compatibility.py +0 -0
  91. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/low_level_jit.py +0 -0
  92. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/optimization.py +0 -0
  93. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/qiskit_interface.py +0 -0
  94. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/reporting/figure_gen.py +0 -0
  95. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/src/mGST/reporting/reporting.py +0 -0
  96. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/tag-from-pipeline.sh +0 -0
  97. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/test +0 -0
  98. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/tests/unit/test_benchmark_circuit.py +0 -0
  99. {iqm_benchmarks-2.18 → iqm_benchmarks-2.20}/update-requirements.py +0 -0
@@ -2,6 +2,15 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 2.20
6
+ ============
7
+ * Standardizes observations for CLOPS and Mirror RB.
8
+
9
+ Version 2.19
10
+ ============
11
+ * All functional tests extended to the fake Deneb backend.
12
+ * Added backend transpilation to REM calibration circuits to fix errors with REM on fake Deneb.
13
+
5
14
  Version 2.18
6
15
  ============
7
16
  * Added notebook to benchmark IQM Star QPUs and bug fixes done for Qscore.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: iqm-benchmarks
3
- Version: 2.18
3
+ Version: 2.20
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>, Aniket Rath <aniket.rath@meetiqm.com>, Jami Rönkkö <jami@meetiqm.com>, Pedro Figueroa Romero <pedro.romero@meetiqm.com>, Vicente Pina Canelles <vicente.pina@meetiqm.com>, Raphael Brieger <raphael.brieger@meetiqm.com>, Stefan Seegerer <stefan.seegerer@meetiqm.com>, Miikka Koistinen <miikka@meetiqm.com>, Adrian Auer <adrian.auer@meetiqm.com>, Nadia Milazzo <nadia.milazzo@meetiqm.com>
6
6
  Project-URL: Homepage, https://github.com/iqm-finland/iqm-benchmarks
@@ -1119,9 +1119,9 @@ mypy-extensions==1.0.0 \
1119
1119
  myst-nb==1.1.0 \
1120
1120
  --hash=sha256:0ac29b2a346f9a1257edbfb5d6c47d528728a37e6b9438903c2821f69fda9235 \
1121
1121
  --hash=sha256:9278840e844f5d780b5acc5400cbf63d97caaccf8eb442a55ebd9a03e2522d5e
1122
- myst-parser==4.0.0 \
1123
- --hash=sha256:851c9dfb44e36e56d15d05e72f02b80da21a9e0d07cba96baf5e2d476bb91531 \
1124
- --hash=sha256:b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d
1122
+ myst-parser==4.0.1 \
1123
+ --hash=sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4 \
1124
+ --hash=sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d
1125
1125
  nbclient==0.10.2 \
1126
1126
  --hash=sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d \
1127
1127
  --hash=sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193
@@ -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:
@@ -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 BenchmarkAnalysisResult, BenchmarkRunResult
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
- observations = {}
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
- observations.update({1: processed_results})
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, observations)
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 BenchmarkAnalysisResult, BenchmarkRunResult
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
- observations = {}
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
- observations.update({qubits_idx: processed_results})
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
- observations,
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
- observations,
577
+ obs_dict,
561
578
  mrb_2q_density=density_2q_gates,
562
579
  mrb_2q_ensemble=two_qubit_gate_ensemble,
563
580
  )
@@ -198,29 +198,20 @@ class M3IQM(mthree.M3Mitigation):
198
198
  trans_qcs[(num_jobs - 1) * circ_slice :]
199
199
  ]
200
200
  # Do job submission here
201
- # This Backend check is here for Qiskit direct access. Should be removed later.
202
201
  jobs = []
203
- if not isinstance(self.system, Backend):
204
- for circs in circs_list:
205
- transpiled_circuit = transpile(circs, self.system, optimization_level=0)
202
+ for circs in circs_list:
203
+ transpiled_circuit = transpile(circs, self.system, optimization_level=0)
204
+ if cal_id is None:
206
205
  _job = self.system.run(transpiled_circuit, shots=shots, rep_delay=self.rep_delay)
207
- jobs.append(_job)
208
-
209
- # *****************************************
210
- else: # That's what IQM backend do!
211
- # *****************************************
212
- for circs in circs_list:
213
- if cal_id is None:
214
- _job = self.system.run(circs, shots=shots, rep_delay=self.rep_delay)
215
- else:
216
- _job = self.system.run(
217
- circs,
218
- shots=shots,
219
- rep_delay=self.rep_delay,
220
- calibration_set_id=cal_id,
221
- )
222
- jobs.append(_job)
223
- qcvv_logger.info(f"REM: {len(circs)} calibration circuits to be executed!")
206
+ else:
207
+ _job = self.system.run(
208
+ transpiled_circuit,
209
+ shots=shots,
210
+ rep_delay=self.rep_delay,
211
+ calibration_set_id=cal_id,
212
+ )
213
+ jobs.append(_job)
214
+ qcvv_logger.info(f"REM: {len(circs)} calibration circuits to be executed!")
224
215
 
225
216
  # Execute job and cal building in new thread.
226
217
  self._job_error = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: iqm-benchmarks
3
- Version: 2.18
3
+ Version: 2.20
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>, Aniket Rath <aniket.rath@meetiqm.com>, Jami Rönkkö <jami@meetiqm.com>, Pedro Figueroa Romero <pedro.romero@meetiqm.com>, Vicente Pina Canelles <vicente.pina@meetiqm.com>, Raphael Brieger <raphael.brieger@meetiqm.com>, Stefan Seegerer <stefan.seegerer@meetiqm.com>, Miikka Koistinen <miikka@meetiqm.com>, Adrian Auer <adrian.auer@meetiqm.com>, Nadia Milazzo <nadia.milazzo@meetiqm.com>
6
6
  Project-URL: Homepage, https://github.com/iqm-finland/iqm-benchmarks
@@ -4,23 +4,19 @@ from unittest.mock import patch
4
4
 
5
5
  from iqm.benchmarks.entanglement.ghz import GHZBenchmark, GHZConfiguration
6
6
  from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
7
-
8
-
9
- backend = IQMFakeApollo()
10
-
7
+ from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
11
8
 
12
9
  class TestGHZ:
10
+ backend = IQMFakeApollo()
11
+
13
12
  @patch('matplotlib.pyplot.figure')
14
13
  def test_layouts(self, mock_fig):
15
14
  MINIMAL_GHZ = GHZConfiguration(
16
15
  state_generation_routine=f"tree",
17
16
  custom_qubits_array=[
18
- [10, 15],
19
- [0, 1, 3],
20
- [0, 1, 3, 4],
21
- # [0,1,2,3,4],
22
- # [0,1,2,3,4,5],
23
- # [0,1,2,3,4,5,6],
17
+ [5, 6],
18
+ [1, 3, 4],
19
+ [1, 3, 4, 5],
24
20
  ],
25
21
  shots=3,
26
22
  qiskit_optim_level=3,
@@ -30,17 +26,17 @@ class TestGHZ:
30
26
  rem=False,
31
27
  mit_shots=10,
32
28
  )
33
- benchmark = GHZBenchmark(backend, MINIMAL_GHZ)
29
+ benchmark = GHZBenchmark(self.backend, MINIMAL_GHZ)
34
30
  benchmark.run()
35
31
  benchmark.analyze()
36
32
  mock_fig.assert_called()
37
33
 
38
34
  @patch('matplotlib.pyplot.figure')
39
35
  def test_state_routine(self, mock_fig):
40
- for gen_routine in [f"tree", f"naive", "log_depth"]:
36
+ for gen_routine in [f"tree", f"naive", "log_depth", "star"]:
41
37
  MINIMAL_GHZ = GHZConfiguration(
42
38
  state_generation_routine=gen_routine,
43
- custom_qubits_array=[[0, 1, 2, 3]],
39
+ custom_qubits_array=[[2, 3, 4]],
44
40
  shots=3,
45
41
  qiskit_optim_level=3,
46
42
  optimize_sqg=True,
@@ -49,7 +45,7 @@ class TestGHZ:
49
45
  rem=False,
50
46
  mit_shots=10,
51
47
  )
52
- benchmark = GHZBenchmark(backend, MINIMAL_GHZ)
48
+ benchmark = GHZBenchmark(self.backend, MINIMAL_GHZ)
53
49
  benchmark.run()
54
50
  benchmark.analyze()
55
51
  mock_fig.assert_called()
@@ -59,7 +55,7 @@ class TestGHZ:
59
55
  for fidelity_routine in [f"coherences", f"randomized_measurements"]:
60
56
  MINIMAL_GHZ = GHZConfiguration(
61
57
  state_generation_routine=f"tree",
62
- custom_qubits_array=[[0, 1, 2, 3]],
58
+ custom_qubits_array=[[2, 3, 4]],
63
59
  shots=3,
64
60
  qiskit_optim_level=3,
65
61
  optimize_sqg=True,
@@ -68,7 +64,10 @@ class TestGHZ:
68
64
  rem=True,
69
65
  mit_shots=10,
70
66
  )
71
- benchmark = GHZBenchmark(backend, MINIMAL_GHZ)
67
+ benchmark = GHZBenchmark(self.backend, MINIMAL_GHZ)
72
68
  benchmark.run()
73
69
  benchmark.analyze()
74
70
  mock_fig.assert_called()
71
+
72
+ class TestGHZDeneb(TestGHZ):
73
+ backend = IQMFakeDeneb()
@@ -3,16 +3,17 @@
3
3
  from unittest.mock import patch
4
4
 
5
5
  from iqm.benchmarks.compressive_gst.compressive_gst import CompressiveGST, GSTConfiguration
6
-
7
-
8
- backend = "iqmfakeapollo"
6
+ from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
7
+ from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
9
8
 
10
9
 
11
10
  class TestGST:
11
+ backend = IQMFakeApollo()
12
+
12
13
  @patch('matplotlib.pyplot.figure')
13
14
  def test_1q(self, mock_fig):
14
15
  minimal_1Q_config = GSTConfiguration(
15
- qubit_layouts=[[5], [0]],
16
+ qubit_layouts=[[5], [1]],
16
17
  gate_set="1QXYI",
17
18
  num_circuits=10,
18
19
  shots=10,
@@ -20,15 +21,15 @@ class TestGST:
20
21
  bootstrap_samples=2,
21
22
  max_iterations=[1, 1],
22
23
  )
23
- benchmark = CompressiveGST(backend, minimal_1Q_config)
24
+ benchmark = CompressiveGST(self.backend, minimal_1Q_config)
24
25
  benchmark.run()
25
- result = benchmark.analyze()
26
+ benchmark.analyze()
26
27
  mock_fig.assert_called()
27
28
 
28
29
  @patch('matplotlib.pyplot.figure')
29
30
  def test_2q(self, mock_fig):
30
31
  minimal_2Q_GST = GSTConfiguration(
31
- qubit_layouts=[[1, 0]],
32
+ qubit_layouts=[[2, 3]],
32
33
  gate_set="2QXYCZ_extended",
33
34
  num_circuits=4,
34
35
  shots=10,
@@ -36,7 +37,10 @@ class TestGST:
36
37
  bootstrap_samples=0,
37
38
  max_iterations=[1, 1],
38
39
  )
39
- benchmark = CompressiveGST(backend, minimal_2Q_GST)
40
+ benchmark = CompressiveGST(self.backend, minimal_2Q_GST)
40
41
  benchmark.run()
41
- result = benchmark.analyze()
42
+ benchmark.analyze()
42
43
  mock_fig.assert_called()
44
+
45
+ class TestGSTDeneb(TestGST):
46
+ backend = IQMFakeDeneb()
@@ -0,0 +1,37 @@
1
+ """Tests for Qscore estimation"""
2
+
3
+ from iqm.benchmarks.optimization.qscore import *
4
+ from iqm.qiskit_iqm.fake_backends.fake_adonis import IQMFakeAdonis
5
+ from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
6
+
7
+
8
+ class TestQScore:
9
+ backend = IQMFakeAdonis()
10
+ qpu_topology = "crystal"
11
+ custom_qubits_array = [[0], [0, 2], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
12
+
13
+ def test_qscore(self):
14
+ EXAMPLE_QSCORE = QScoreConfiguration(
15
+ num_instances=2,
16
+ num_qaoa_layers=1,
17
+ shots=4,
18
+ calset_id=None, # calibration set ID, default is None
19
+ min_num_nodes=2,
20
+ max_num_nodes=None,
21
+ use_virtual_node=True,
22
+ use_classically_optimized_angles=True,
23
+ choose_qubits_routine="custom",
24
+ custom_qubits_array=self.custom_qubits_array,
25
+ seed=1,
26
+ REM=True,
27
+ mit_shots=10,
28
+ qpu_topology=self.qpu_topology
29
+ )
30
+ benchmark = QScoreBenchmark(self.backend, EXAMPLE_QSCORE)
31
+ benchmark.run()
32
+ benchmark.analyze()
33
+
34
+ class TestQScoreDeneb(TestQScore):
35
+ backend = IQMFakeDeneb()
36
+ qpu_topology = "star"
37
+ custom_qubits_array = [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6]]
@@ -2,20 +2,21 @@
2
2
 
3
3
  from iqm.benchmarks.quantum_volume.clops import CLOPSBenchmark, CLOPSConfiguration
4
4
  from iqm.benchmarks.quantum_volume.quantum_volume import QuantumVolumeBenchmark, QuantumVolumeConfiguration
5
-
6
-
7
- backend = "fakeapollo"
5
+ from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
6
+ from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
8
7
 
9
8
 
10
9
  class TestQV:
10
+ backend = IQMFakeApollo()
11
+
11
12
  def test_qv(self):
12
13
  EXAMPLE_QV = QuantumVolumeConfiguration(
13
14
  num_circuits=5,
14
- shots=2**4,
15
+ shots=2**5,
15
16
  calset_id=None,
16
17
  num_sigmas=2,
17
18
  choose_qubits_routine="custom",
18
- custom_qubits_array=[[0, 1]],
19
+ custom_qubits_array=[[2, 3]],
19
20
  qiskit_optim_level=3,
20
21
  optimize_sqg=True,
21
22
  routing_method="sabre",
@@ -24,16 +25,16 @@ class TestQV:
24
25
  rem=True,
25
26
  mit_shots=10,
26
27
  )
27
- benchmark = QuantumVolumeBenchmark(backend, EXAMPLE_QV)
28
+ benchmark = QuantumVolumeBenchmark(self.backend, EXAMPLE_QV)
28
29
  benchmark.run()
29
30
  benchmark.analyze()
30
31
 
31
32
  def test_clops(self):
32
33
  EXAMPLE_CLOPS = CLOPSConfiguration(
33
- qubits=[0, 1],
34
- num_circuits=2, # By definition set to 100
34
+ qubits=[2, 3],
35
+ num_circuits=4, # By definition set to 100
35
36
  num_updates=2, # By definition set to 10
36
- num_shots=2, # By definition set to 100
37
+ num_shots=2**5, # By definition set to 100
37
38
  calset_id=None,
38
39
  clops_h_bool=True,
39
40
  qiskit_optim_level=3,
@@ -41,6 +42,9 @@ class TestQV:
41
42
  routing_method="sabre",
42
43
  physical_layout="fixed",
43
44
  )
44
- benchmark = CLOPSBenchmark(backend, EXAMPLE_CLOPS)
45
+ benchmark = CLOPSBenchmark(self.backend, EXAMPLE_CLOPS)
45
46
  benchmark.run()
46
47
  benchmark.analyze()
48
+
49
+ class TestQVDeneb(TestQV):
50
+ backend = IQMFakeDeneb()
@@ -14,15 +14,15 @@ from iqm.benchmarks.randomized_benchmarking.mirror_rb.mirror_rb import (
14
14
  MirrorRandomizedBenchmarking,
15
15
  MirrorRBConfiguration,
16
16
  )
17
-
18
-
19
- backend = "fakeapollo"
20
-
17
+ from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
18
+ from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
21
19
 
22
20
  class TestRB:
21
+ backend = IQMFakeApollo()
22
+
23
23
  def test_mrb(self):
24
24
  EXAMPLE_MRB = MirrorRBConfiguration(
25
- qubits_array=[[0, 1], [0, 3]],
25
+ qubits_array=[[2, 3], [3, 4]],
26
26
  depths_array=[[2**m for m in range(4)]],
27
27
  num_circuit_samples=2,
28
28
  num_pauli_samples=2,
@@ -32,13 +32,13 @@ class TestRB:
32
32
  two_qubit_gate_ensemble={"CZGate": 0.8, "iSwapGate": 0.2},
33
33
  density_2q_gates=0.25,
34
34
  )
35
- benchmark = MirrorRandomizedBenchmarking(backend, EXAMPLE_MRB)
35
+ benchmark = MirrorRandomizedBenchmarking(self.backend, EXAMPLE_MRB)
36
36
  benchmark.run()
37
37
  benchmark.analyze()
38
38
 
39
39
  def test_irb(self):
40
40
  EXAMPLE_IRB_1Q = InterleavedRBConfiguration(
41
- qubits_array=[[0]],
41
+ qubits_array=[[1]],
42
42
  sequence_lengths=[2 ** (m + 1) - 1 for m in range(4)],
43
43
  num_circuit_samples=2,
44
44
  shots=2**4,
@@ -47,7 +47,7 @@ class TestRB:
47
47
  interleaved_gate_params=[np.pi, 0],
48
48
  simultaneous_fit=["amplitude", "offset"],
49
49
  )
50
- benchmark = InterleavedRandomizedBenchmarking(backend, EXAMPLE_IRB_1Q)
50
+ benchmark = InterleavedRandomizedBenchmarking(self.backend, EXAMPLE_IRB_1Q)
51
51
  benchmark.run()
52
52
  benchmark.analyze()
53
53
 
@@ -60,6 +60,9 @@ class TestRB:
60
60
  calset_id=None,
61
61
  parallel_execution=False,
62
62
  )
63
- benchmark = CliffordRandomizedBenchmarking(backend, EXAMPLE_CRB_1Q)
63
+ benchmark = CliffordRandomizedBenchmarking(self.backend, EXAMPLE_CRB_1Q)
64
64
  benchmark.run()
65
65
  benchmark.analyze()
66
+
67
+ class TestRBDeneb(TestRB):
68
+ backend = IQMFakeDeneb()
@@ -1,50 +0,0 @@
1
- """Tests for Qscore estimation"""
2
-
3
- from iqm.benchmarks.optimization.qscore import *
4
-
5
-
6
- backend = "IQMFakeAdonis"
7
-
8
-
9
- class TestQScore:
10
- def test_qscore_crystal(self):
11
- EXAMPLE_QSCORE = QScoreConfiguration(
12
- num_instances=2,
13
- num_qaoa_layers=1,
14
- shots=4,
15
- calset_id=None, # calibration set ID, default is None
16
- min_num_nodes=2,
17
- max_num_nodes=None,
18
- use_virtual_node=True,
19
- use_classically_optimized_angles=True,
20
- choose_qubits_routine="custom",
21
- custom_qubits_array=[[2], [2, 0], [2, 0, 1], [2, 0, 1, 3], [2, 0, 1, 3, 4]],
22
- seed=1,
23
- REM=True,
24
- mit_shots=10,
25
- qpu_topology="crystal"
26
- )
27
- benchmark = QScoreBenchmark(backend, EXAMPLE_QSCORE)
28
- benchmark.run()
29
- benchmark.analyze()
30
-
31
- def test_qscore_star(self):
32
- EXAMPLE_QSCORE = QScoreConfiguration(
33
- num_instances=2,
34
- num_qaoa_layers=1,
35
- shots=4,
36
- calset_id=None, # calibration set ID, default is None
37
- min_num_nodes=2,
38
- max_num_nodes=None,
39
- use_virtual_node=True,
40
- use_classically_optimized_angles=True,
41
- choose_qubits_routine="custom",
42
- custom_qubits_array=[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6]],
43
- seed=1,
44
- REM=True,
45
- mit_shots=10,
46
- qpu_topology="star"
47
- )
48
- benchmark = QScoreBenchmark(backend, EXAMPLE_QSCORE)
49
- benchmark.run()
50
- benchmark.analyze()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes