/LPC-PTM

A painfully slow Python demonstration of a Pauli transfer matrix simulator

Primary LanguagePython

This repository demonstrates a low-performance (LPC) simulator of noisy quantum circuit expectation values using the Pauli transfer matrix (PTM) formalism, and Rudolph et al's truncation methods. It prototypes an extension of the QIC group's LOWESA simulator (in "breadth-first mode") to support:

  • A wider family of non-Clifford canonical operators.
  • Operators which map a Pauli string to more than two output strings.
  • Operators which are non-CPTP, such as rotations with complex parameters.
  • Operators specified as general matrices and Kraus maps.
  • Operators containing multiple parameters and arbitrary symbolic expressions.
  • Runtime computation and caching of Pauli transfer matrices (as maps).
  • Efficient storage of Pauli strings as arbitrary-precision integers.
  • Efficient merging of incident Pauli strings during simulation.
  • Easier development through a modular design.

An introduction to PTM simulation is given in THEORY.md, and an interactive demo of using the simulator is found in main.ipynb (or as a raw script in main.py).

We caution that this repository is not a practical simulation tool, and you will find it painfully slow to run (it's pure Python!). It instead serves as a pedagogical demonstration of PTM simulation, and as a prototype for future LOWESA development in Julia.