Join the official 2019 Python Developers Survey

Transforms stabilizer state into graph state

# StabGraph

Every stabilizer state can be transformed into a graph state by means of a local Clifford unitary. stabgraph is contains the function `convert` that, given a stabilizer state, it finds such a graph state and the local Clifford unitary that transforms the stabilizer state into the graph state. This function follows the steps described in the article .

 Manuscript under preparation.

## Installation

To install using pip:

```python -m pip install --upgrade pip
python -m pip install stabgraph
```

Replace `python` with `python3` as appropriate.

## Usage

```import stabgraph

G , c , t , z , R = stabgraph.convert(stabs,control=None,target=None,shuffle=False)
```

INPUT

`stabs` contains the N stabilizer operators defining a stabilizer state of N qubits. It is a list of N strings 'PPPP...', one for each stabilizer operator. Every string has N elements 'P' from the set 'I', 'X', 'Y', 'Z', that represents the set of Pauli matrices.

OPTIONAL INPUTS

`control` is a list of control qubits. Gives the option to set some qubits as control qubits. Qubits are labelled from 0 to N-1. It is an empy list by default.

`target` is a list of target qubits. Gives the option to set some qubits as target qubits. Qubits are labelled from 0 to N-1. It is an empty list by default.

`shuffle` can be set to be True. For a given stabilizer state there are multiple local Clifford equivalent graph states that can be obtained by this program. If shuffle=True the output graph is one of these graphs chosen randomly. shuffle=False by default.

OUTPUTS

`G` adjacency matrix defining the underlying graph of the graph state. It is a NxN numpy array composed by 0 and 1.

`c` list of control qubits labelled from 0 to N-1. The program completes the list of control qubits given as an input.

`t` list of target qubits labelled from 0 to N-1. The program completes the list of target qubits given as an input. A Hadamard gate is applied on every target qubit.

`z` list of control qubits labelled from 0 to N-1 where a pi/2 z-rotation is applied.

`R` invertible binary matrix representing the recombination of stabilizers performed to obtain the stabilizers of the graph state. It is a NxN numpy array composed of 0 and 1.

EXAMPLES

Bell pair

``````>>> stabs = ['XX','ZZ']
>>> G , c , t , z , R = stabgraph.convert(stabs)
>>> G
np.array([[0,1],[1,0]])
>>> c

>>> t

>>> z
[]
>>> R
np.array([[1,0],[0,1]])
``````

GHZ state fixing 0 as a control qubit and 1 as a target qubit

``````>>> stabs = ['XXX','ZZI','IZZ']
>>> G , c , t , z , R = stabgraph.convert(stabs,,)
>>> c

>>> t
[1,2]
``````

Steane code in the |0> logical state. Multiple graphs can be obtained, so put `shuffle=True` to obtain one of them randomly chosen. The result respects the selection of control and target qubits

``````>>> stabs = ['XXXXIII','IXXIXXI','IIXXIXX','ZZZZIII','IZZIZZI','IIZZIZZ','ZZZZZZZ']
>>> G , c , t , z , R = stabgraph.convert(stabs, control = , shuffle=True)
>>> c
[0,1,2]
>>> G , c , t , z , R = stabgraph.convert(stabs, control = [2, 5], shuffle=True)
>>> c
[2,5,6]

``````

## Citation

``````@misc{amaro2019,
author = 	"David Amaro",
title = 	"StabGraph",
year = 	"2019",
month =   "July",
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/davamaro/stabgraph}}
}
``````

## Project details

This version 0.1.2 0.1.1 0.1