QuTIpy

QuTIpy (Quantum Theory of Information for Python; pronounced /cutiɛ paɪ/)

Quantum Theory of Information for Python; pronounced "cutie pie". A package for performing calculations with quantum states, channels and protocols. It is comparable to the QETLAB packagearrow-up-right for MATLAB/Octave.

Requirements

The code requires Python 3, and apart from the standard numpy and scipy packages, it requires cvxpy if you want to run SDPsarrow-up-right (e.g., for the diamond normarrow-up-right). It requires sympy for symbolic computations.

Installation

A simple pip install from the github repository will install the package in your system.

$ pip install git+https://github.com/sumeetkhatri/QuTIpy

Examples

Here are some simple examples.

We start by importing the package:

>>> from qutipy import *
>>> from qutipy.general_functions import *

Creating basis vectors

To create the qubit statearrow-up-right 0{\displaystyle |0\rangle }, we execute the following line.

>>> ket(2,0)

The first argument specifies the dimension, in this case two, and the second argument is the index for the basis vectorarrow-up-right that we want. The output of the above line is the following numpy matrix object:

Similarly,

gives the following output:

In general, ket(d,j), for j between 0 and d-1, generates a d-dimensional column vector (as a numpy matrix) in which the jth entry contains a one.

We can take tensor products of d-dimensional basis vectors using ket(). For example, the two-qubit state 00{\displaystyle |0\rangle|0\rangle } can be created as follows:

In general, ket(d, [j1, j2, ... , jn]) creates the n-fold tensor product j1j2...jn{\displaystyle |j_1\rangle|j_2\rangle...|j_n\rangle } of d-dimensional basis vectors.

Taking the partial trace

Given an operator RABR_{AB} acting on a tensor product Hilbert spacearrow-up-right of the quantum systems A and B, the partial tracearrow-up-right over B can be calculated as follows:

Here, dimA is the dimension of system A and dimB is the dimension of system B. Similarly,

takes the partial trace of R_AB over system A. In general, partial_trace(R,sys,dim) traces over the systems in the list sys, and dim is a list of the dimensions of all of the subsystems on which the operator R acts.

Quantum states

We can generate a random quantum statearrow-up-right (i.e., density matrixarrow-up-right) in d dimensions as follows:

To generate a random pure statearrow-up-right (i.e., state vector) in d dimensions:

To generate an isotropic state in d dimensions:

where p is the fidelity to the maximally entangled state.

Another special class of states is the Werner states:

circle-info

The Isotropic State can be viewed as a probabilistic mixture of the Quditarrow-up-right Bell states, such that the state ϕϕ{\displaystyle |\phi\rangle\langle\phi| } is prepared with probability pp, and the states ϕz,xϕz,x{\displaystyle |\phi_{z,x}\rangle\langle\phi_{z,x}| }, with (z,x)(0,0)(z, x) \neq (0, 0), are prepared with probability 1pd21\frac{1−p} {d^2−1}. This implies that every isotropic state is a Bell-diagonal state, that it has full rank, and that its eigenvalues are pp and 1pd21\frac{1−p} {d^2−1} (the latter with multiplicity d21d^2 − 1).

circle-info

The Werner state WAB(p,d){\displaystyle W_{AB}^{(p,d)}}, for 2 quantum systems AA and BB, with dA=dB=d2d_A = d_B = d ≥ 2, is a mixture of projectorsarrow-up-right onto the symmetric and antisymmetric subspaces, with the relative weight p[0,1]{\displaystyle p\in [0,1]} being the main parameter that defines the state,

for ρAB=ρABW;p\rho_{AB}=\rho^{W;p}_{AB} ,

such that ρABW;p:=pζAB+(1p)ζAB\rho^{W;p}_{AB} := p\zeta_{AB} + (1 − p)\zeta^\bot_{AB}

where ζAB\zeta_{AB} and ζAB\zeta^\bot_{AB} are quantum states and are proportional to the projections onto the anti-symmetric and symmetric subspaces respectively.

Quantum channels

The package comes with functions for commonly-used channels such as the depolarizing channel and the amplitude damping channel. One can also create an arbitrary Qubitarrow-up-right Pauli channel as follows:

where px, py, pz are the probabilities of the individual Pauli Matricesarrow-up-right. The output of this function contains the Kraus operatorsarrow-up-right of the channelarrow-up-right as well as an isometric extension of the channel.

In order to apply a quantum channelarrow-up-right to a quantum statearrow-up-right rho, we can use the function apply_channel. First, let us define the following amplitude damping channelarrow-up-right :

The variable K contains the Kraus operatorsarrow-up-right of the channel. Then,

gives the state at the output of the channel when the input state is rho.

Other functions include:

  • Getting the Choi and natural representation of a channel from its Kraus representation

  • Converting between the Choi, natural, and Kraus representations of a channel

Summary of other features

The package also contains functions for:

  • Trace norm

  • Fidelity and entanglement fidelity

  • Random unitaries

  • Clifford unitaries

  • Generators of the su(d) Lie algebra (for d=2, this is the set of Pauli matrices)

  • Discrete Weyl operators

  • von Neumann entropy and relative entropy

  • Renyi entropies

  • Coherent information and Holevo information for states and channels

Acknowledgements

Thanks to Mark Wildearrow-up-right for suggesting the name for the package.

Last updated