PauliStrings Python

November 10, 2025 ยท View on GitHub

.. image:: https://github.com/nicolasloizeau/PauliStrings.py/actions/workflows/test.yml/badge.svg :target: https://github.com/nicolasloizeau/PauliStrings.py/actions/workflows/test.yml :alt: Tests Status

.. image:: https://img.shields.io/badge/docs-blue :target: https://nicolasloizeau.github.io/PauliStrings.py/ :alt: Documentation

.. image:: https://img.shields.io/badge/arXiv-2410.09654-b31b1b :target: https://arxiv.org/abs/2410.09654 :alt: arXiv

.. image:: https://img.shields.io/badge/SciPost-10.214684-002B49 :target: https://scipost.org/SciPostPhysCodeb.54 :alt: SciPost

==================== PauliStrings Python

This is a Python version of PauliStrings.jl <https://paulistrings.org/>_. The Julia version is more mature, we recommend using it if possible.

Getting started

Installation

Install with pip:

.. code-block:: bash

pip install paulistrings

Install the dev version from github:

.. code-block:: bash

pip install git+https://github.com/nicolasloizeau/paulistrings.py.git

Documentation

https://nicolasloizeau.github.io/PauliStrings.py/

Creating Operators

Import the library and initialize an operator of 4 qubits:

.. code-block:: python

import paulistrings as ps
H = ps.Operator(4)

Add Pauli strings to the operator:

.. code-block:: python

H += "XYZ1"
H += "1YZY"
print(H)

.. code-block:: none

(1.0 + 0.0j) XYZ1
(1.0 + 0.0j) 1YZY

Add a Pauli string with a coefficient:

.. code-block:: python

# Coefficients can be complex
H = ps.Operator(4)
H += -1.2, "XXXZ"

.. code-block:: none

(1.0 + 0.0j) XYZ1
(1.0 + 0.0j) 1YZY
(-1.2 + 0.0j) XXXZ

Add a 2-qubit string coupling qubits i and j with X and Y:

.. code-block:: python

i, j = 0, 2  # example qubit indices
H += 2.0, "X", i, "Y", j  # with coefficient=2
H += "X", i, "Y", j       # with coefficient=1

Add a 1-qubit string:

.. code-block:: python

i = 1  # example qubit index
H += 2.0, "Z", i  # with coefficient=2
H += "Z", i # with coefficient=1

Basic Operations

Operators support standard arithmetic operations with other operators and numbers:

.. code-block:: python

# Multiplication
H3 = H1 * H2

# Addition and subtraction
H3 = H1 + H2
H3 = H1 - H2

# Scalar operations
H3 = H1 + 2  # Adding a scalar (equivalent to adding identity times scalar)
H = 5 * H    # Multiply operator by a scalar

Common operations on operators:

.. code-block:: python

# Trace of an operator
trace = ps.trace(H)

# Frobenius norm
norm = ps.opnorm(H)

# Number of terms in the operator
num_terms = len(H)  # or len(H.coeffs)

# Commutator [H1, H2] = H1*H2 - H2*H1
# This is more efficient than computing H1*H2 - H2*H1 directly
comm = ps.commutator(H1, H2)

Contributing, Contact

Contributions are welcome! Feel free to open a pull request if you'd like to contribute code or documentation. For bugs and feature requests, please open an issue <https://github.com/nicolasloizeau/PauliStrings.py/issues>. For questions, you can either contact nicolas.loizeau@nbi.ku.dk or start a new discussion <https://github.com/nicolasloizeau/PauliStrings.py/discussions> in the repository.

Citation

.. code-block:: bibtex

@Article{Loizeau2025,
	title={{Quantum many-body simulations with PauliStrings.jl}},
	author={Nicolas Loizeau and J. Clayton Peacock and Dries Sels},
	journal={SciPost Phys. Codebases},
	pages={54},
	year={2025},
	publisher={SciPost},
	doi={10.21468/SciPostPhysCodeb.54},
	url={https://scipost.org/10.21468/SciPostPhysCodeb.54},
}

@Article{Loizeau2025,
	title={{Codebase release 1.5 for PauliStrings.jl}},
	author={Nicolas Loizeau and J. Clayton Peacock and Dries Sels},
	journal={SciPost Phys. Codebases},
	pages={54-r1.5},
	year={2025},
	publisher={SciPost},
	doi={10.21468/SciPostPhysCodeb.54-r1.5},
	url={https://scipost.org/10.21468/SciPostPhysCodeb.54-r1.5},
}