{ "metadata": { "name": "development-benchmark-expect" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Test and benchmarks of expectation value calculation in QuTiP\n", "\n", "\n", "Copyright (C) 2011 and later, Paul D. Nation & Robert J. Johansson" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from qutip import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from qutip.cyQ.spmatfuncs import cy_expect" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "N = 50" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "op = rand_herm(N)\n", "ket = rand_ket(N)\n", "rho = ket2dm(ket)\n", "\n", "ket_data = ket.full()\n", "op_data = op.data" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "sop = spre(op)\n", "sop_data = sop.data" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "rho_vec = operator_to_vector(rho)\n", "rho_vec_data = rho_vec.full()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test for consistent results\n", "\n", "Test various ways, from high level to low level, of calculating expectation values in qutip." ] }, { "cell_type": "code", "collapsed": false, "input": [ "expect(op, ket)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "-7.758978511084069" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "expect(op, rho)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "-7.75897851108407" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "cy_expect(op_data.data, op_data.indices, op_data.indptr, ket_data, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "-7.758978511084069" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "expect_psi(op_data, ket_data, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "-7.758978511084069" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "expect_rho_vec(sop_data, rho_vec_data, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "-7.75897851108407" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Benchmarks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### wavefunction" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "expect(op, ket)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000 loops, best of 3: 688 \u00b5s per loop\n" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "cy_expect(op_data.data, op_data.indices, op_data.indptr, ket_data, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10000 loops, best of 3: 34 \u00b5s per loop\n" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "expect_psi(op_data, ket_data, 1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10000 loops, best of 3: 30.2 \u00b5s per loop\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### density matrix" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "expect(op, rho)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000 loops, best of 3: 802 \u00b5s per loop\n" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "expect_rho_vec(sop_data, rho_vec_data)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000 loops, best of 3: 640 \u00b5s per loop\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Software versions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from qutip.ipynbtools import version_table\n", "\n", "version_table()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
SoftwareVersion
matplotlib1.4.x
Numpy1.8.0.dev-75cdf3d
Python3.3.1 (default, Apr 17 2013, 22:30:32) \n", "[GCC 4.7.3]
IPython1.0.dev
OSposix [linux]
SciPy0.13.0.dev-d74fd00
QuTiP2.3.0.dev-7f0ed30
Cython0.19.1
Thu Jul 04 15:50:58 2013 JST
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }