qiskit-community / qiskit-qec

Qiskit quantum error correction framework
https://qiskit-community.github.io/qiskit-qec/
Apache License 2.0
76 stars 32 forks source link

XP-Formalism #257

Open dsvandet opened 1 year ago

dsvandet commented 1 year ago

What is the expected enhancement?

Implement the XP-Formalism as detailed in the following paper by Webster, Brown and Barlett Qauntum 6, 815 (2022)

dsvandet commented 1 year ago

Getting started:

We will have to create a new set of classes for the XP operators. Currently we have the BasePauli class and its subclasses Paul and PauliList. These classes are located in:

qiskit_qec
   - operators
       - base_pauli.py
       - pauli.py
       - pauli_list.py

Here Pauliand PauliList as classes based on the BasePauli class.

As a start we need to create the following class BaseXPPauli, XPPauli and XPPauliList.

The BasePauli classes use a fixed representation for the Paulis called -iZX. That means Paulis are represented in the form $(-i)^p Z^m_1X^n_1 ... Z^m_kX^n_k$ where $p$ is an integer (called the phase exponent) in $0,1,2,3$ and the $m_i, n_i$ are integers in $0,1$. The Symplectic matrix is stored as a single matrix with the X part first followed by the Z part. We should continued this format for the XP formats. That is the generalized symplectic matrix should be stored as a single matrix that contains both the X and P (called Z) parts. Note that the phase vector is stored separately (for BasePauli should be for the XP operators).

We wish to keep things simple to the base storage should be a numpy array with integer coefficients and then the modulo calculations can be done on top of that inside the class (and hidden from the user).

The BasePauli and associated classes has a pauli_rep set if methods to display the Paulis in particular formats. We should create a xp_pauli_rep set of methods to do the same for the XP operators. In the beginning the only output format should be something simple. We can update this later. The 'pauli_rep' methods are stored in the util directory,

Once we have the BaseXPPauli class created with dummy methods we can then split up the task of filling in the different bit and pieces.

Does anyone what to start by creating the skeleton BaseXpPauli class? I can do this if that helps but just let me know.

I have create the first issue with is to create the skeleton BaseXPPauli class and xp_pauli_rep.py

dhruvbhq commented 1 year ago

I'd like to have a go at creating the skeleton BaseXPPauli class (issue #258).