Skip to main content

FiQCI Error Mitigation Service

Project description

FiQCI EMS

FiQCI Error Mitigation Service (EMS) is a Python library for quantum error mitigation as part of the Finnish Quantum Computing Infrastructure (FiQCI). It wraps IQM quantum backends and applies error mitigation transparently, allowing users to run circuits with improved accuracy by specifying a mitigation level.

This python package can be pre-installed on a HPC system or installed by the user. The main goal of the project is to allow users using FiQCI quantum computers to easily add flags to run error mitigated quantum jobs.

Mitigation Levels

Sampler
Level Mitigation Applied Technique
0 None Raw results
1 Readout Error Mitigation M3 (matrix-free measurement mitigation)
2 Level 1 + Dynamical Decoupling Dynamical Decoupling
3 Level 2 + Pauli Twirling Pauli Twirling
Estimator
Level Mitigation Applied Technique
0 None Raw results
1 Readout Error Mitigation M3 (matrix-free measurement mitigation)
2 Level 1 + Dynamical Decoupling Dynamical Decoupling
3 Level 2 + Zero Noise Extrapolation Exponential Extrapolation, Local Folding

[!NOTE] FiQCIBackend mitigation levels correspond to the Sampler levels.

The default is level 1, which applies M3 readout error mitigation.

Installation

UV is recommended for installation

uv pip install fiqci-ems
#or
uv add fiqci-ems

Requires Python 3.11 or 3.12.

Usage

Start by initialising your IQM backend and a quantum circuit.

from iqm.qiskit_iqm import IQMProvider
from qiskit import QuantumCircuit, transpile

# Initialise backend
provider = IQMProvider()
backend = provider.get_backend()

# Define a quantum circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

# Transpile the circuit
qc_transpiled = transpile(qc, backend=backend, initial_layout=qubit_indices)

EMS provides three interfaces depending on your use case.

FiQCISampler - sampling interface

For users who need measurement counts with built-in mitigation:

from fiqci.ems import FiQCISampler

# Using mitigation_level
sampler = FiQCISampler(backend, mitigation_level=1)

# Execute the job
job = sampler.run(qc_transpiled, shots=2048)

# Get results
result = job.result()

# Or manually set mitigation options
sampler.rem(enabled=True, calibration_shots=2000, calibration_file="cals.json")

# See applied and available options
sampler.mitigation_options()

FiQCIEstimator - expectation values

Computes expectation values of Pauli observables directly from circuits:

from fiqci.ems import FiQCIEstimator
from qiskit.quantum_info import SparsePauliOp

# Using mitigation_level
estimator = FiQCIEstimator(backend, mitigation_level=1)

# Define observables
observables = SparsePauliOp.from_list([("ZZ", 1), ("IX", 1)])

# Map observables to transpiled layout
device_observables = observables.apply_layout(qc_transpiled.layout)

# Execute the job
job_collection = estimator.run(qc_transpiled, observables=device_observables, shots=2048)

# Get expectation values
evs = job_collection.expectation_values()

# Access all jobs executed by estimator
jobs = job_collection.jobs()

# Or manually set mitigation options
estimator.rem(enabled=True, calibration_shots=2000, calibration_file="cals.json")

# See applied and available options
estimator.mitigation_options()

FiQCIBackend - drop-in backend replacement

FiQCIBackend is used under the hood by both sampler and estimator. Wraps any IQM backend and applies error mitigation to run() calls:

from fiqci.ems import FiQCIBackend

# Using mitigation_level
backend = FiQCIBackend(backend, mitigation_level=1)

# Execute the job
job = backend.run(circuit, shots=1024)

# Get the results
result = job.result()

# Or manually set mitigation options
backend.rem(enabled=True, calibration_shots=2000, calibration_file="cals.json")

# See applied and available options
backend.mitigation_options()

Access raw (pre-mitigation) counts via backend.raw_counts.

Advanced Usage

It is also possible to manually configure and directly use the M3 mitigator without the wrapper classes above. Consult the docs for how this is done.

Configuration

All three interfaces accept the same core options:

Parameter Default Description
mitigation_level 1 Mitigation level (0-3)
calibration_shots 1000 Shots used for M3 calibration circuits
calibration_file None Path to save/load calibration data (JSON)

Mitigation can also be configured directly. See the docs for FiQCISampler, FiQCIEstimator, and FiQCIBackend to see all available options.

Documentation

Full documentation including API reference, guides, and Jupyter notebook examples is available at docs

Development

# Install with dev dependencies
uv sync

# Run tests
uv run pytest

# Run tests with coverage
uv run pytest --cov

# Lint and format
uv run ruff check --fix
uv run ruff format

# Type check
uv run pyrefly check 

Building docs

#Install docs dependencies
uv sync --group docs

#Build docs
uv run sphinx-build docs/ docs/_build

License

Apache 2.0, see LICENSE for details.

Having trouble?

Contact servicedesk@csc.fi or raise an issue here.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fiqci_ems-0.6.1.tar.gz (407.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fiqci_ems-0.6.1-py3-none-any.whl (33.6 kB view details)

Uploaded Python 3

File details

Details for the file fiqci_ems-0.6.1.tar.gz.

File metadata

  • Download URL: fiqci_ems-0.6.1.tar.gz
  • Upload date:
  • Size: 407.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fiqci_ems-0.6.1.tar.gz
Algorithm Hash digest
SHA256 a5a4f97bf18ab5f2de74bfcbe74630e88b789bccd072f4e198a4117eb83860b5
MD5 494535f0d388a4993d88c936a445d363
BLAKE2b-256 5cf842de29de8902a0a4f3cca96aa937bf6ee0892b3dbe04b4aae83c3bdd04d5

See more details on using hashes here.

File details

Details for the file fiqci_ems-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: fiqci_ems-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 33.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fiqci_ems-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cea0557544d1e87ab226b09d565c68d4a6c5943e4dc2407d9525a9adb6759c27
MD5 52f6b00d7c54b63030bf954284abf8b1
BLAKE2b-256 6c1935668424014158e1bd5cac485b88aa51164d1a4f9bc642370f0e1f147d45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page