# Changelog
## Version 3.0.0 (2026-09-29)
### Breaking changes
- `generate_ghz_spanning_tree`, `get_cx_map` and `get_edges` are removed from
`iqm.benchmarks.entanglement.ghz`. They implemented the replaced
minimum-spanning-tree routine and have no remaining callers; `ghz_optimal`
covers what they did.
### Bug fixes
- Update docs links from iqm-finland.github.io to docs.iqm.tech.
### Features
- The GHZ `"tree"` state generation routine now chooses the qubits, the
spanning tree and the gate order together, trading gate fidelity against the
time each qubit spends idling instead of minimising gate error alone.
Configured through the `tree_objective`, `tree_idle_penalty`,
`tree_depth_penalty`, `tree_cz_duration` and `tree_rank` options of
`GHZConfiguration`. See `iqm.benchmarks.entanglement.ghz_optimal`.
- `plot_layout_fidelity_graph(show_ghz_path=True)` now highlights the tree a run
would actually build, from the same calibration, rather than a separately
computed minimum spanning tree. It takes an optional `tree_options` to match a
non-default configuration.
- `perform_backend_transpilation` accepts an `initial_layout`, so a caller that
already knows where each logical qubit belongs does not make the transpiler
search for it.
- An unknown `state_generation_routine` or `tree_objective` is now rejected when
the configuration is built. Both used to be accepted silently, the former
falling through to the log-depth circuits, so a typo measured a different
circuit family without saying so.
- Candidate trees whose costs agree to 3 decimal places are now ranked by CZ
layer count, so the shallowest tree the objective cannot distinguish is the
one that runs. This matters most with `tree_idle_penalty=0.0` or
`tree_objective="min_error"`, where depth is not priced into the objective at
all.
- Bumps minimum NumPy version to 2.2 after 2.1 has reached its EOL.
## Version 2.60.0 (2026-07-07)
### Bug fixes
- Enable ``timeslot`` mode for IQM Resonance.
- Add ``active_reset_cycles`` to circuit compilation options.
- Fix calibration data retrieval.
- Fix QScore benchmark for higher QAOA depths.
- Domain changed from meetiqm.com to iqm.tech
- Switch from pinned dependencies to ranges for the bare package installation.
### Features
- Adapt tests to run on real and mock backends. This effectively turns
the tests into E2E tests.
- Add optional dependency groups with pinned versions to `iqm-benchmarks`:
- `pin-iqm`: pins inter-IQM package dependencies to the exact versions that
are tested and released together.
- `pin-all`: like `pin-iqm`, but additionally pins all transitive third-party
dependencies to exact locked versions.
- `examples-pin-iqm`: includes `examples` extra dependencies with inter-IQM
packages pinned to co-released versions.
- `examples-pin-all`: like `examples-pin-iqm`, but additionally pins all
transitive third-party dependencies.
- Update `more-itertools` python package dependency version range.
## Version 2.59.0
### Features
- Publish package and documentation publicly.
- Migration to an internal repo from [GitHub](https://github.com/iqm-finland/iqm-benchmarks).
- Removal of pyGSTi dependency and addition of functionality replacement
code in mgst.
- Enabled local generation of single- and two-qubit GST circuits without
version controlled .pkl files.
- Removed obsolete `benchmark.py` (all base class functionality is now in `benchmark_definition.py`).
- Extensive linting and type hinting changes to conform with repo standards.
## Version 2.58
- Fixed a bug that would lead to circuit compilation options not being applied.
## Version 2.57
- Added calibration data for Clifford fidelities.
## Version 2.56
- Fixed import bug with iRB.
- Improved execution of star_optimal GHZ creation circuit.
## Version 2.55
- Compatibility with new job metadata formats.
- Unified fetching of calibration data via IQMClient.
- Addition of active reset and approximate transpilation options in the configurations.
## Version 2.54
- Update iqm-client and iqm-station-control-client dependency ranges for compatibility with IQM OS 4.4.
## Version 2.53
- Improvements made for QScore benchmark to take custom layout for Star processors.
## Version 2.52 (2025-11-13)
### Features
- Circuit transpilation improvements for GHZ benchmark implemented.
## Version 2.51 (2025-11-07)
### Features
- Circuit transpilation improvements for Q-score implemented.
## Version 2.50 (2025-10-30)
### Features
- Update iqm-client and iqm-station-control-client dependency versions as part of IQM OS 4.3 release.
## Version 2.49 (2025-10-20)
### Features
- Added logging of execution time to all benchmarks.
## Version 2.48 (2025-10-16)
### Features
- Updated iqm-client and supported python versions.
## Version 2.47 (2025-09-05)
### Features
- Updated qiskit and iqm-client dependencies
## Version 2.46 (2025-08-27)
### Features
- Bug fixes encorporated for Q-score benchmark.
## Version 2.45 (2025-08-25)
### Features
- GST overhaul:
- Added gate context
- Updated and fixed Hinton diagrams for process matrices
- Added dominant coherent errors plot
- Updated Jupyter tutorial: Running for different ranks, new plot, context explanation
- Properly defined idle gates with delay and added idle gate to default two qubit gate set
- Parallel post-processing of layouts
- Maximum likelihood optimization for the final estimate
## Version 2.44 (2025-08-11)
### Features
- Added qubit positions for Emerald
- Visibility improvements for Graph state and EPLG plots
- Add visualization of single qubit errors (Fidelity, readout, T1, T2) to the layout fidelity graph plot
## Version 2.43 (2025-07-27)
### Features
- Added coherence benchmark for T1 and T2 estimations.
## Version 2.42 (2025-07-22)
### Features
- Improved run-time execution for QScore benchmark.
## Version 2.41 (2025-07-22)
### Features
- Fixed deprecated colormap usage in several benchmarks.
## Version 2.40 (2025-07-04)
### Features
- Added optimise_single_qubit_gates option for crystal processors.
## Version 2.39 (2025-06-26)
### Features
- Relax `numba` dependency to allow easier interoperability with other client libraries.
## Version 2.38 (2025-06-26)
### Features
- Update `iqm-client` dependency to `29.0+`.
- Added iqm-station-control-client dependency to ensure iqm-client version works with stations on resonance.
## Version 2.37 (2025-06-11)
### Features
- Update `iqm-client` dependency to `27.0+`.
## Version 2.36 (2025-04-28)
### Features
- Fixed bugs for qscore and CLOPS.
## Version 2.35 (2025-04-22)
### Features
- Improved qiskit transpilation for Qscore benchmark.
## Version 2.34 (2025-04-16)
### Features
- Update `iqm-client` dependency to `23.8+`.
## Version 2.33 (2025-04-14)
### Features
- Added Error Per Layered Gate (EPLG) benchmark.
## Version 2.32 (2025-04-08)
### Features
- Fixed incorrect edge width assignment in qubit selection plot.
## Version 2.31 (2025-04-02)
### Features
- Fixed a bug in the bootstrapping functionality of the GST benchmark and
updated the respective Jupyter tutorial.
## Version 2.30 (2025-04-01)
### Features
- Updated CLOPS value and plot reporting, making explicit offline values, such
as time spent in transpilation and in parameter assigning.
## Version 2.29 (2025-03-26)
### Features
- Fixed header levels in `example_graphstate` notebook for correct pages
rendering.
## Version 2.28 (2025-03-26)
### Features
- Added graph state (bipartite entanglement negativity) benchmark.
## Version 2.27 (2025-03-24)
### Features
- Qiskit on IQM dependency updated to > 17.0.
## Version 2.26 (2025-03-20)
### Features
- Changed benchmark observation names and identifiers to be more consistent
with guidelines.
## Version 2.25 (2025-03-18)
### Features
- Added optional configuration parameter (`max_circuits_per_batch`) to specify
the maximum amount of circuits per batch.
## Version 2.24 (2025-03-07)
### Features
- Added rustworkx dependency range to fix wrong edge thickness assignment in
qubit selection plot.
## Version 2.23 (2025-03-04)
### Features
- Added dynamical decoupling parameter option to configurations of all
benchmarks.
- Added visual aid plot for qubit selection (see, e.g., GHZ example notebook).
- Included option to run GST in parallel if the specified qubits don't overlap
- Small runtime improvements in the GST benchmark.
- Changed tensor order in GST outputs from Qiskit (bottom to top) to standard
(top to bottom) order.
## Version 2.22 (2025-02-27)
### Features
- Fix for QScore errors when custom_qubits_array is specified.
## Version 2.21 (2025-02-25)
### Features
- Function to bootstrap counts added to utils file.
## Version 2.20 (2025-02-20)
### Features
- Standardizes observations for CLOPS and Mirror RB.
## Version 2.19 (2025-02-18)
### Features
- All functional tests extended to the fake Deneb backend.
- Added backend transpilation to REM calibration circuits to fix errors with REM
on fake Deneb.
## Version 2.18 (2025-02-12)
### Features
- Added notebook to benchmark IQM Star QPUs and bug fixes done for Qscore.
## Version 2.17 (2025-02-10)
### Features
- Update installation command for development mode.
`#41 <https://github.com/iqm-finland/iqm-benchmarks/pull/41>`_
## Version 2.16 (2025-02-07)
### Features
- Added readout error mitigation for Qscore benchmark.
## Version 2.15 (2025-02-06)
### Features
- Added optimal GHZ circuit generation and corresponding example notebook for
all-to-all connected QPU topology.
## Version 2.14 (2025-01-31)
### Features
- Added devices folder in docs with notebook to benchmark IQM Spark.
## Version 2.13 (2025-01-20)
### Features
- Move all example notebooks to docs.
`#30 <https://github.com/iqm-finland/iqm-benchmarks/pull/30>`_
## Version 2.12 (2025-01-20)
### Features
- Added compatibility with IQM-Deneb by adapting the transpilation behavior in
several benchmarks.
## Version 2.11 (2025-01-17)
### Features
- Report average native single-qubit gate fidelity estimates in observations of
1Q Clifford RB and 1Q IRB, and display in plots of 1Q Clifford RB.
## Version 2.10 (2025-01-17)
### Features
- Fix docs publishing by CI.
## Version 2.9 (2025-01-15)
### Features
- Add optional security-scanned lockfile.
## Version 2.8 (2025-01-10)
### Features
- Fixed a bug where optional dependencies related to gst were imported with
other benchmarks, leading to a ModuleNotFoundError.
## Version 2.7 (2025-01-09)
### Features
- Fixed bugs in Qscore and enabled benchmark execution for pyrite.
## Version 2.6 (2025-01-08)
### Features
- Fixed bugs including wrong GHZ plot x-Axis labels and incorrect transpiled and
untranspiled circuit storage for mGST.
- Added note about optional dependency "mgst".
- Improved display and calculation method for Hamiltonian parameter output of
rank 1 compressive GST.
## Version 2.5 (2025-01-07)
### Features
- Changed simulation method for MRB to 'stabilizer' and simulation circuits are
compiled in circuit generation stage.
## Version 2.4 (2024-12-23)
### Features
- Changed Qscore to operate under the new base class.
## Version 2.3 (2024-12-18)
### Features
- Reverted QV simulation circuits to untranspiled ones (fixes bug giving all
HOPs equal to zero).
## Version 2.2 (2024-12-17)
### Features
- Added Clifford RB example notebook to docs.
`#20 <https://github.com/iqm-finland/iqm-benchmarks/pull/20>`_
## Version 2.1 (2024-12-16)
### Features
- Fixed bug in RB plots for individual decays.
## Version 2.0 (2024-12-16)
### Features
- Adds `Circuits`, `BenchmarkCircuit` and `CircuitGroup` as a way to easily
store and interact with multiple quantum circuits.
- `BenchmarkRunResult` now takes a `circuits` argument, expecting an instance
of `Circuits`. `QuantumCircuit` instances can now exist there instead of
inside xarray Datasets. All analysis methods should also expect to use an
instance of `BenchmarkRunResult`.
- Ported all of the benchmarks subclassing from `Benchmark` to use the new
containers.
- Updates the usage of `qiskit.QuantumCircuit` to `iqm.qiskit_iqm.IQMCircuit`
in many places.
## Version 1.12 (2024-12-13)
### Features
- Miscellaneous small bugs fixed.
## Version 1.11 (2024-12-12)
### Features
- Relaxes dependencies to allow for ranges.
## Version 1.10 (2024-12-11)
### Features
- Added API docs building and publishing.
## Version 1.9 (2024-12-10)
### Features
- Fixed bug (overwriting observations) in Quantum Volume.
- Fixed small bug in CLOPS when calling plots in simulator execution.
## Version 1.8 (2024-12-09)
### Features
- Changed compressive GST to operate under the new base class and added
multiple qubit layouts.
- Added plot to GHZ benchmark and applied small fixes.
- Added tutorial notebook for the GHZ benchmark.
## Version 1.7 (2024-12-09)
### Features
- Remove explicit dependency on qiskit, instead taking it from qiskit-on-iqm.
## Version 1.6 (2024-12-03)
### Features
- Minor change in dependencies for compatibility.
## Version 1.5 (2024-12-03)
### Features
- fit results are no longer `BenchmarkObservation`, and instead are moved into
the datasets.
## Version 1.4 (2024-12-03)
### Features
- Renames:
- AnalysisResult -> BenchmarkAnalysisResult
- RunResult -> BenchmarkRunResult
- Adds BenchmarkObservation class, and modifies BenchmarkAnalysisResult so
observations now accepts a list[BenchmarkObservation].
- Adds BenchmarkObservationIdentifier class.
- Rebases RandomizedBenchmarking benchmarks, QuantumVolume, GHZ and CLOPS to
use the new Observation class.
- Fixes serialization of some circuits.
- Adds AVAILABLE_BENCHMARKS to map a benchmark name to its class in __init__.
- Adds benchmarks and configurations to __init__ for public import.
- Other fixes.
## Version 1.3 (2024-11-29)
### Features
- Further improvements to type hints, docstrings, and error messages.
## Version 1.2
### Features
- Minor improvements to type hints, docstrings, and error messages.
## Version 1.1
### Features
- Fixed bug preventing execution on a generic IQM Backend.
- Randomized Benchmarking (Clifford, Interleaved and Mirror), Quantum Volume,
CLOPS and GHZ state fidelity all functioning exclusively under new Benchmark
base class.
- Updated separate example Jupyter notebooks.
## Version 1.0
### Features
- Published Randomized Benchmarking (Clifford, Interleaved and Mirror), Quantum
Volume, CLOPS and GHZ state fidelity all functioning exclusively under new
Benchmark base class.
- Updated separate example Jupyter notebooks.