Skip to main content

A library for implementing spacetime coherent Pauli checks

Project description

Qiskit addon: Paulice

Overview

qiskit-paulice is a package for embedding hardware efficient Pauli checks into arbitrary Clifford circuits on arbitrary qubit connectivities using spacetime stabilizer codes. These checks can be used to detect logical errors during circuit execution. Postselecting only samples with no detected errors can improve the fidelity of states sampled with a quantum processor at the cost of some ancilla qubits and an increase in sampling overhead. This method is particularly suited to near-term hardware since it has a much milder overhead in qubits and gates compared to fault tolerant quantum computing, while having a better sampling overhead than error mitigation methods such as ZNE or PEC [1].

Although spacetime Pauli checks may be used to implement standalone error detection routines, they are also relevant in the context of error mitigation and error correction. Error detection can complement error mitigation techniques such as probabilistic error cancellation (PEC) by capturing some of the noise affecting gates and measurements, reducing the impact of the noise channel being inverted and thus reducing the sampling overhead. They may also be viewed as an early step toward practical fault tolerance since implementing stabilizer codes to protect data qubits from logical errors is a core concept of traditional error correction. Since this method provides single shot access to the quantum state it can be used in both sampling-based and expectation value-based workflows.

Finding good sets of spacetime Pauli checks

Quantum circuit cartoon

A set of spacetime Pauli checks is "good" if each check is valid, low weight, and effective.

A check is comprised of a number of controlled Pauli rotations, $P$, placed on some wires in the circuit, $w$: ${(P_1,w_1), ..., (P_k,w_k)}$. For a given check, the controls lie on a single ancilla qubit, and the rotations occur on wires of a single target qubit. For Clifford circuits, a check is valid if its backpropagated product is a stabilizer of the state prepared by the ideal circuit: $\prod_{i}B(P_i,w_i) \in S$, where $B(P,w)$ is the backpropagator of $P$ from $w$ to the beginning of the circuit, and $S$ is the set of all stabilizers of the circuit.

A check is low weight if it requires few entangling gates to implement. The check picking algorithm will favor checks that are low weight and provide the most effective error detection.

A check is effective if it captures much more error than it introduces. A Pauli check is comprised of a number of entangling gates and thus introduces some additional gate noise into the calculation. It is important to ensure each additional check brings some additional error detection capability. The effectiveness of a set of checks can be approximated by composing the Pauli errors that are uncovered by the checks into a postselected noise channel and calculating its impact. Minimizing the sampling overhead for implementing the uncovered inverse noise channel is a solid heuristic for selecting good checks, as it gives an indication of how much error the checks can't detect. A slower but more realistic approach is to perform a Monte Carlo sampling from the noisy state and empirically compute the logical error rate of the postselected distribution. Both of these approaches are available as built-in cost functions in the qiskit_paulice.add_pauli_checks function.

Postselecting samples based on syndrome data

In this package a check is implemented using entangling gates between one ancilla qubit and one target qubit. Each ancilla starts in $|0\rangle$, so $Z_\text{anc}$ stabilizes its input state. Forward propagating $Z_\text{anc}$ from the beginning of the ancilla through the entire checked circuit yields a Pauli operator on the output which may be higher weight and extend into the payload circuit. The qubit indices on which this output operator has non-identity terms are called the check's support, and the check passes if the bits, $b$, in the check's support have even parity: $\bigoplus_{i=1} b_i = 0$. A sample is kept if each check produces $0$ for its parity check.


Code example

Check out the tutorial for an overview of how to use this package to improve the fidelity of a stabilizer state prepared from noisy QPU samples.


Features

  • Automatic noise model creation from backend benchmark data
  • Rust accelerated check finding
  • 3 built-in algorithms for check finding
  • Evaluate efficacy of checks based on sampling overhead of postselected inverse noise channel or logical error rate based on Monte Carlo sampling of noisy state
  • Helper functionality for finding ancilla/target qubit pairs for a given backend

Known issues

  • Idling noise is not provided via NoiseModel.get_backend and is ignored during check picking
  • While many stochastic steps in the algorithm are controllable with a random seed, some features have randomness not controllable with a seed. Specifically, the following kwargs values for add_pauli_checks will cause undeterministic check picking: cost="LER", method="genetic", and method="windowed_genetic". For deterministic behavior use: add_pauli_checks(..., cost="gamma", method="windowed"), which are the default values.

Future work

  • Support for handling non-Clifford systems
  • More support for analyzing postselected noise channel
  • Handling idling noise when picking checks
  • Controllable randomness for logical error rate cost function and genetic search algorithms

Documentation

All documentation is available at https://qiskit.github.io/qiskit-paulice/.


Installation

We encourage installing this package via pip, when possible:

pip install 'qiskit-paulice'

For more installation information refer to these installation instructions.


Deprecation Policy

We follow semantic versioning and are guided by the principles in Qiskit's deprecation policy. We may occasionally make breaking changes in order to improve the user experience. When possible, we will keep old interfaces and mark them as deprecated, as long as they can co-exist with the new ones. Each substantial improvement, breaking change, or deprecation will be documented in the release notes.


Contributing

The source code is available on GitHub.

The developer guide is located at CONTRIBUTING.md in the root of this project's repository. By participating, you are expected to uphold Qiskit's code of conduct.


License

Apache License 2.0


References

[1] Simon Martiel, Ali Javadi-Abhari, Low-overhead error detection with spacetime codes, arXiv:2504.15725 [quant-ph].

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

qiskit_paulice-0.1.0.tar.gz (784.0 kB view details)

Uploaded Source

Built Distributions

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

qiskit_paulice-0.1.0-cp310-abi3-win_amd64.whl (381.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (560.5 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (542.0 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

qiskit_paulice-0.1.0-cp310-abi3-macosx_11_0_arm64.whl (487.6 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

qiskit_paulice-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl (502.0 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file qiskit_paulice-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for qiskit_paulice-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7f1d9f5139fd4b57b6a0657d3666a40f8051efc7d75563c5814eca493358c93f
MD5 b25eccf740d872849acdc7aed9ec8175
BLAKE2b-256 5a72b02a55dd4ddb511e9aa61d7110c9bd924d0f14c22929d3d5953a9ba50b6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_paulice-0.1.0.tar.gz:

Publisher: release.yml on Qiskit/qiskit-paulice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qiskit_paulice-0.1.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for qiskit_paulice-0.1.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3649abf3cb552f10ab490aa61bdd39a70773812b8f87cbf99050215fc7981049
MD5 e9937c30f105074f89cf6b3ad3615f28
BLAKE2b-256 82fa3eb00209550f971387f3bc78e15dadbbeb6abf41de0c056befd4ee69ca67

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_paulice-0.1.0-cp310-abi3-win_amd64.whl:

Publisher: release.yml on Qiskit/qiskit-paulice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c0e958dee5dd8692271f47316a2fdd31c4cd74e80fab680b1d84199270186ff2
MD5 0a2c1575fe32a8ad98d2554167172996
BLAKE2b-256 adb13812a04493477966d019640091628b3f53243f509506c4c1a23ff28270f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: release.yml on Qiskit/qiskit-paulice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 7b2c33c9fae26f07f4e9b13cb24327f15fd427d3b478264e409d47577e0da9f5
MD5 7462fa052cef45738a14a50dc3a075be
BLAKE2b-256 b14978ff650b3206b9b5d119b716ecc4551c06b49823bd6cc05f6e768bf90481

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_paulice-0.1.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: release.yml on Qiskit/qiskit-paulice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qiskit_paulice-0.1.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for qiskit_paulice-0.1.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d36c640c4ac33e499fa5d1c3fcd5c4c9f36571d858b7d1d720c21a6493e602c
MD5 f3baf5ce882fc0ab87016e2edefcadc7
BLAKE2b-256 2827e2e2427037416ac34b7a950da3bfb4fee21456c98a56f8931e799c6f5895

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_paulice-0.1.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on Qiskit/qiskit-paulice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qiskit_paulice-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_paulice-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 149edd91ca613e71a01a874f8ce4ce5c2907d7fc122f8622c6494298af7bea9f
MD5 baf87748a20a6eb7fecd0696dfc42226
BLAKE2b-256 b27cbbe61bbf56fc9e910320af713778e325be28ef0144826ecf349fb5939e1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for qiskit_paulice-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on Qiskit/qiskit-paulice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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