Skip to content

Instantly share code, notes, and snippets.

@stared
Last active December 28, 2015 01:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stared/7419041 to your computer and use it in GitHub Desktop.
Save stared/7419041 to your computer and use it in GitHub Desktop.
Bra-ket notation for QuTiP.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from qutip import *"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definitions\n",
"\n",
"Some simple syntactic sugar for braket notation (i.e. $\\langle\\psi |$, $|\\psi \\rangle$)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def ket(seq, dim=2):\n",
" \"\"\"\n",
" Produces a multiparticle ket state for a list or string,\n",
" where each element stands for state of the respective particle.\n",
" \n",
" seq: be either a list of ints (e.g. [1,1,0,1]) or a string \"1101\".\n",
" dim: int or list of ints\n",
" \"\"\"\n",
" if isinstance(dim, int):\n",
" dim = [dim] * len(seq)\n",
" return tensor([basis(dim[i], int(x)) for i, x in enumerate(seq)])\n",
"\n",
"\n",
"def bra(seq, dim=2):\n",
" return ket(seq, dim=dim).dag()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## States"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ket(\"010\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket}\\\\[1em]\\begin{pmatrix}0.0\\\\0.0\\\\1.0\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 16,
"text": [
"Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket\n",
"Qobj data =\n",
"[[ 0.]\n",
" [ 0.]\n",
" [ 1.]\n",
" [ 0.]\n",
" [ 0.]\n",
" [ 0.]\n",
" [ 0.]\n",
" [ 0.]]"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# two qubit singlet\n",
"(ket(\"01\") - ket(\"10\")).unit()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[2, 2], [1, 1]], shape = [4, 1], type = ket}\\\\[1em]\\begin{pmatrix}0.0\\\\0.707\\\\-0.707\\\\0.0\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": [
"Quantum object: dims = [[2, 2], [1, 1]], shape = [4, 1], type = ket\n",
"Qobj data =\n",
"[[ 0. ]\n",
" [ 0.70710678]\n",
" [-0.70710678]\n",
" [ 0. ]]"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Greenberger\u2013Horne\u2013Zeilinger state (GHZ state)\n",
"(ket(\"000\") + ket(\"111\")).unit()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket}\\\\[1em]\\begin{pmatrix}0.707\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\0.707\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
"Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket\n",
"Qobj data =\n",
"[[ 0.70710678]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0.70710678]]"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# W state (Dicke state for 3 qubits with 1 excitation)\n",
"(ket(\"001\") + ket(\"010\") + ket(\"100\")).unit()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket}\\\\[1em]\\begin{pmatrix}0.0\\\\0.577\\\\0.577\\\\0.0\\\\0.577\\\\0.0\\\\0.0\\\\0.0\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
"Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket\n",
"Qobj data =\n",
"[[ 0. ]\n",
" [ 0.57735027]\n",
" [ 0.57735027]\n",
" [ 0. ]\n",
" [ 0.57735027]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]]"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# three qutrit singlet state\n",
"(ket(\"012\",3) + ket(\"120\",3) + ket(\"201\",3)\n",
" - ket(\"210\",3) - ket(\"102\",3) - ket(\"021\",3)).unit()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[3, 3, 3], [1, 1, 1]], shape = [27, 1], type = ket}\\\\[1em]\\begin{pmatrix}0.0\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\\\vdots\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\0.0\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 20,
"text": [
"Quantum object: dims = [[3, 3, 3], [1, 1, 1]], shape = [27, 1], type = ket\n",
"Qobj data =\n",
"[[ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0.40824829]\n",
" [ 0. ]\n",
" [-0.40824829]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [-0.40824829]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0.40824829]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0.40824829]\n",
" [ 0. ]\n",
" [-0.40824829]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]\n",
" [ 0. ]]"
]
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Operators"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ket(\"00\") * bra(\"11\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = False}\\\\[1em]\\begin{pmatrix}0.0 & 0.0 & 0.0 & 1.0\\\\0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 21,
"text": [
"Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isherm = False\n",
"Qobj data =\n",
"[[ 0. 0. 0. 1.]\n",
" [ 0. 0. 0. 0.]\n",
" [ 0. 0. 0. 0.]\n",
" [ 0. 0. 0. 0.]]"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# 2 qubit projection on the singlet space\n",
"\n",
"ket2dm((ket(\"01\") - ket(\"10\")).unit())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$\\text{Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True}\\\\[1em]\\begin{pmatrix}0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.500 & -0.500 & 0.0\\\\0.0 & -0.500 & 0.500 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0\\\\\\end{pmatrix}$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isherm = True\n",
"Qobj data =\n",
"[[ 0. 0. 0. 0. ]\n",
" [ 0. 0.5 -0.5 0. ]\n",
" [ 0. -0.5 0.5 0. ]\n",
" [ 0. 0. 0. 0. ]]"
]
}
],
"prompt_number": 22
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment