A package to perform quantum information calculations
Project description
QuTIpy
Quantum Theory of Information for Python pronounced "cutie pie". A package for performing calculations with quantum states and channels. It is comparable to the QETLAB package for MATLAB / Octave.
Read more about the QuTIpy package at our GitBook.
Requirements
The code requires Python 3, and apart from the standard numpy
and scipy
packages, it requires cvxpy
if you want to run SDPs (e.g., for the diamond norm). 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 state ${\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 vector that we want. The output of the above line is the following numpy matrix object:
ndarray([[1.],
[0.]])
Similarly,
>>> ket(2,1)
gives the following output:
ndarray([[0.],
[1.]])
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 ${\displaystyle |0\rangle|0\rangle }$ can be created as follows:
>>> ket( 2, [0, 0] )
In general, ket(d, [j1, j2, ... , jn])
creates the n-fold tensor product ${\displaystyle |j_1\rangle|j_2\rangle...|j_n\rangle }$ of d-dimensional basis vectors.
Taking the partial trace
Given an operator $R_{AB}$ acting on a tensor product Hilbert space of the quantum systems A
and B
, the partial trace over B
can be calculated as follows:
>>> partial_trace(R_AB, [2], [dimA, dimB])
Here, dimA
is the dimension of system A
and dimB
is the dimension of system B
. Similarly,
>>> partial_trace(R_AB, [1], [dimA, dimB])
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 state (i.e., density matrix) in d
dimensions as follows:
>>> RandomDensityMatrix(d)
To generate a random pure state (i.e., state vector) in d
dimensions:
>>> RandomPureState(d)
To generate an isotropic state in d
dimensions:
>>> isotropic_state(p,d)
where p
is the fidelity to the maximally entangled state.
Another special class of states is the Werner states:
>>> Werner_state(p,d)
The Isotropic State can be viewed as a probabilistic mixture of the Qudit Bell states, such that the state ${\displaystyle |\phi\rangle\langle\phi| }$ is prepared with probability $p$, and the states ${\displaystyle |\phi_{z,x}\rangle\langle\phi_{z,x}| }$, with $(z, x) \neq (0, 0)$, are prepared with probability $\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 $p$ and $\frac{1−p} {d^2−1}$ (the latter with multiplicity $d^2 − 1$).
The Werner state ${\displaystyle W_{AB}^{(p,d)}}$, for 2 quantum systems $A$ and $B$, with $d_A = d_B = d ≥ 2$, is a mixture of projectors onto the symmetric and antisymmetric subspaces, with the relative weight ${\displaystyle p\in [0,1]}$ being the main parameter that defines the state, for ${\displaystyle \rho_{AB} = {\rho_{AB}}^{W;p} }$ , such that ${\rho_{AB}}^{W;p} := p\zeta_{AB} + (1 − p)\zeta^\bot_{AB}$
where $\zeta_{AB}$ and $\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 Qubit Pauli channel as follows:
>>> Pauli_channel(px, py, pz)
where px, py, pz
are the probabilities of the individual Pauli Matrices. The output of this function contains the Kraus operators of the channel as well as an isometric extension of the channel.
In order to apply a quantum channel to a quantum state rho
, we can use the function apply_channel
. First, let us define the following amplitude damping channel :
>>> K = amplitude_damping_channel(0.2)
The variable K
contains the Kraus operators of the channel. Then,
>>> rho_out = apply_channel(K, rho)
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 Wilde for suggesting the name for the package.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file QuTIpy-0.1.0a0.tar.gz
.
File metadata
- Download URL: QuTIpy-0.1.0a0.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb18ff0bf98e4c6b804873adb7cdf25b15b6314d41d80060b24f63cfe4ac789c |
|
MD5 | c2661c61964a473a98097c4744332ade |
|
BLAKE2b-256 | a41a9f61a1831eaf62fe494c0a8f5771b6dbd75bfe4d57a65c8b5d3131f1ea32 |
File details
Details for the file QuTIpy-0.1.0a0-py3-none-any.whl
.
File metadata
- Download URL: QuTIpy-0.1.0a0-py3-none-any.whl
- Upload date:
- Size: 53.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d744b3a7d1d4e2d229258ce2cf9c852b5543a57fdc4fd71df6539b8fef2cd50 |
|
MD5 | bb6ae07a703c6e0b9b7c73b9d6854826 |
|
BLAKE2b-256 | 65fcbda93eba4aeb6e03109e112145055edf8220537c279c96b48b5b65e5808c |