From 367a8b7ad84be353a0898d85b56c115146466eb8 Mon Sep 17 00:00:00 2001 From: Ryan Babbush Date: Mon, 8 May 2017 15:53:28 -0700 Subject: [PATCH 1/2] Minor modifications to docs --- docs/examples.rst | 23 +- docs/intro.rst | 6 +- examples/fermilib_demo.ipynb | 895 ++++------------------------------- 3 files changed, 103 insertions(+), 821 deletions(-) diff --git a/docs/examples.rst b/docs/examples.rst index 24d4d56..3c4a12d 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -3,7 +3,8 @@ Examples ======== -All of these example codes (and many more!) can be found on `GitHub `_. +All of these examples (and more!) are explained in detail in the ipython notebook +fermilib_demo.ipynb located at `GitHub `_. .. toctree:: :maxdepth: 2 @@ -60,7 +61,14 @@ FermionOperator supports a wide range of builtins including str(), repr(), =, , Qubit Operators --------------- -The QubitOperator data structure is another essential part of FermiLib. While the QubitOperator was originally developed for FermiLib, it is now part of the core ProjectQ library so that it can be interpreted by the ProjectQ compiler using the TimeEvolution gate. As the name suggests, QubitOperator is used to store qubit operators in almost exactly the same way that FermionOperator is used to store fermion operators. For instance :math:`X_0 Z_3 Y_4` is a QubitOperator. The internal representation of this as a terms tuple would be :math:`((0,"X"),(3,"Z"),(4,"Y"))((0,"X"),(3,"Z"),(4,"Y"))`. Note that one important difference between QubitOperator and FermionOperator is that the terms in QubitOperator are always sorted in order of tensor factor. In some cases, this enables faster manipulation. We initialize some QubitOperators below. +The QubitOperator data structure is another essential part of FermiLib. While +the QubitOperator was originally developed for FermiLib, it is now part of the +core ProjectQ library so that it can be interpreted by the ProjectQ compiler +using the TimeEvolution gate. As the name suggests, QubitOperator is used to +store qubit operators in almost exactly the same way that FermionOperator is +used to store fermion operators. For instance :math:`X_0 Z_3 Y_4` is a +QubitOperator. The internal representation of this as a terms tuple would be +:math:`((0, X),(3, Z),(4, Y))`. Note that one important difference between QubitOperator and FermionOperator is that the terms in QubitOperator are always sorted in order of tensor factor. In some cases, this enables faster manipulation. We initialize some QubitOperators below. .. code-block:: python @@ -72,7 +80,6 @@ The QubitOperator data structure is another essential part of FermiLib. While th operator_2 = QubitOperator('X3 Z4', 3.17) operator_2 -= 77. * my_first_qubit_operator - print('') print(operator_2) Transformations @@ -93,16 +100,14 @@ FermiLib also provides functions for mapping FermionOperators to QubitOperators, # Transform to qubits under the Jordan-Wigner transformation and print its spectrum. jw_operator = jordan_wigner(fermion_operator) - print('') - print(jw_operator) jw_spectrum = eigenspectrum(jw_operator) + print(jw_operator) print(jw_spectrum) # Transform to qubits under the Bravyi-Kitaev transformation and print its spectrum. bk_operator = bravyi_kitaev(fermion_operator) - print('') - print(bk_operator) bk_spectrum = eigenspectrum(bk_operator) + print(bk_operator) print(bk_spectrum) We see that despite the different representation, these operators are iso-spectral. We can also apply the Jordan-Wigner transform in reverse to map arbitrary QubitOperators to FermionOperators. Note that we also demonstrate the .compress() method (a method on both FermionOperators and QubitOperators) which removes zero entries. @@ -119,13 +124,11 @@ We see that despite the different representation, these operators are iso-spectr # Map QubitOperator to a FermionOperator. mapped_operator = reverse_jordan_wigner(my_operator) - print('') print(mapped_operator) # Map the operator back to qubits and make sure it is the same. back_to_normal = jordan_wigner(mapped_operator) back_to_normal.compress() - print('') print(back_to_normal) Sparse matrices and the Hubbard model @@ -157,12 +160,10 @@ Often, one would like to obtain a sparse matrix representation of an operator wh # Get qubit operator under Jordan-Wigner. jw_hamiltonian = jordan_wigner(hubbard_model) jw_hamiltonian.compress() - print('') print(jw_hamiltonian) # Get scipy.sparse.csc representation. sparse_operator = get_sparse_operator(hubbard_model) - print('') print(sparse_operator) print('\nEnergy of the model is {} in units of T and J.'.format( get_ground_state(sparse_operator)[0])) diff --git a/docs/intro.rst b/docs/intro.rst index f1c6df9..ef83f50 100644 --- a/docs/intro.rst +++ b/docs/intro.rst @@ -43,16 +43,14 @@ To see a basic example with both fermionic and qubit operators as well as whethe # Transform to qubits under the Jordan-Wigner transformation and print its spectrum. jw_operator = jordan_wigner(fermion_operator) - print('') - print(jw_operator) jw_spectrum = eigenspectrum(jw_operator) + print(jw_operator) print(jw_spectrum) # Transform to qubits under the Bravyi-Kitaev transformation and print its spectrum. bk_operator = bravyi_kitaev(fermion_operator) - print('') - print(bk_operator) bk_spectrum = eigenspectrum(bk_operator) + print(bk_operator) print(bk_spectrum) diff --git a/examples/fermilib_demo.ipynb b/examples/fermilib_demo.ipynb index c4c9d95..afbf92f 100644 --- a/examples/fermilib_demo.ipynb +++ b/examples/fermilib_demo.ipynb @@ -5,7 +5,7 @@ "metadata": {}, "source": [ "# Introduction to FermiLib alpha version 0.1a0\n", - "### Ryan Babbush, Jarrod McClean, Damian Steiger, Ian Kivlichan, Thomas Haner, Vojtech Havlicek and Wei Sun\n", + "### Ryan Babbush, Jarrod McClean, Damian Steiger, Ian Kivlichan, Thomas Haner, Vojtech Havlicek, Matthew Neeley and Wei Sun\n", "Note that all the examples below must be run sequentially within a section." ] }, @@ -45,18 +45,11 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0 [3^ 1]\n", - "1.0 [3^ 1]\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.ops import FermionOperator\n", "\n", @@ -76,20 +69,11 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.7 [3^ 1]\n", - "-1.7 [3^ 1]\n", - "1.0 []\n", - "0\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "good_way_to_initialize = FermionOperator('3^ 1', -1.7)\n", "print(good_way_to_initialize)\n", @@ -113,18 +97,11 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1+2j) [4^ 1^ 3 9]\n", - "{((4, 1), (1, 1), (3, 0), (9, 0)): (1+2j)}\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "my_operator = FermionOperator('4^ 1^ 3 9', 1. + 2.j)\n", "print(my_operator)\n", @@ -141,21 +118,11 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1+2j) [4^ 3^ 9 1] +\n", - "-1.7 [3^ 1]\n", - "\n", - "(1+2j) [4^ 3^ 9 1] +\n", - "-1.7 [3^ 1]\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.ops import FermionOperator\n", "\n", @@ -180,32 +147,11 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1+2j) [4^ 3^ 9 1] +\n", - "56.1 [3^ 1]\n", - "\n", - "(-302.3229-604.6458j) [3^ 1 3^ 1 4^ 3^ 9 1] +\n", - "(9.1613+18.3226j) [4^ 3^ 9 1 3^ 1 3^ 1] +\n", - "(16.167-21.556j) [4^ 3^ 9 1 3^ 1 4^ 3^ 9 1] +\n", - "(-302.3229-604.6458j) [3^ 1 4^ 3^ 9 1 3^ 1] +\n", - "(-34.87-6.34j) [4^ 3^ 9 1 4^ 3^ 9 1 4^ 3^ 9 1] +\n", - "(16.167-21.556j) [4^ 3^ 9 1 4^ 3^ 9 1 3^ 1] +\n", - "513.94893 [3^ 1 3^ 1 3^ 1] +\n", - "(-533.511+711.348j) [3^ 1 4^ 3^ 9 1 4^ 3^ 9 1]\n", - "\n", - "-4.913 [3^ 1 3^ 1 3^ 1]\n", - "\n", - "True\n", - "False\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "term_1 = FermionOperator('4^ 3^ 9 1', 1. + 2.j)\n", "term_2 = FermionOperator('3^ 1', -1.7)\n", @@ -234,28 +180,11 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1-2j) [3 3^ 4]\n", - "False\n", - "5\n", - "\n", - "(-1-2j) [4^ 3^ 3] +\n", - "(1+2j) [4^]\n", - "True\n", - "\n", - "(3-4j) [4^ 4^ 3 3^] +\n", - "(-3+4j) [4^ 3 3^ 4^] +\n", - "(3-4j) [4^ 3 3^ 4^ 3^ 3] +\n", - "(-3+4j) [4^ 3^ 3 4^ 3 3^]\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.ops import hermitian_conjugated, normal_ordered\n", "from fermilib.utils import commutator, count_qubits\n", @@ -287,21 +216,11 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0 X1 Y2 Z3\n", - "{((1, 'X'), (2, 'Y'), (3, 'Z')): 1.0}\n", - "\n", - "-77.0 X1 Y2 Z3 +\n", - "3.17 X3 Z4\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from projectq.ops import QubitOperator\n", "\n", @@ -325,26 +244,11 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3.17 [2^ 0] +\n", - "3.17 [0^ 2]\n", - "\n", - "(1.585+0j) Y0 Z1 Y2 +\n", - "(1.585+0j) X0 Z1 X2\n", - "[-3.17 -3.17 0. 0. 0. 0. 3.17 3.17]\n", - "\n", - "(-1.585+0j) Y0 Y1 +\n", - "(-1.585+0j) X0 X1 Z2\n", - "[-3.17 -3.17 0. 0. 0. 0. 3.17 3.17]\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.ops import FermionOperator, hermitian_conjugated\n", "from fermilib.transforms import jordan_wigner, bravyi_kitaev\n", @@ -379,34 +283,11 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "88.0 X0 Y1 Z2 +\n", - "3.17 Z1 Z4\n", - "\n", - "-6.34 [4^ 4] +\n", - "176j [2^ 2 1 0] +\n", - "88j [1 0^] +\n", - "-88j [1 0] +\n", - "-88j [1^ 0^] +\n", - "12.68 [4^ 4 1^ 1] +\n", - "3.17 [] +\n", - "-176j [2^ 2 1 0^] +\n", - "88j [1^ 0] +\n", - "-6.34 [1^ 1] +\n", - "-176j [2^ 2 1^ 0] +\n", - "176j [2^ 2 1^ 0^]\n", - "\n", - "88.0 X0 Y1 Z2 +\n", - "3.17 Z1 Z4\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.transforms import reverse_jordan_wigner\n", "\n", @@ -437,99 +318,11 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.25 [2^ 2] +\n", - "1.0 [2^ 2 3^ 3] +\n", - "-2.0 [0^ 1] +\n", - "-2.0 [1^ 3] +\n", - "-2.0 [3^ 2] +\n", - "0.25 [3^ 3] +\n", - "1.0 [0^ 0 1^ 1] +\n", - "-2.0 [2^ 3] +\n", - "-2.0 [0^ 2] +\n", - "-2.0 [3^ 1] +\n", - "0.0 [] +\n", - "-2.0 [1^ 0] +\n", - "-2.0 [2^ 0] +\n", - "-0.25 [0^ 0] +\n", - "1.0 [0^ 0 2^ 2] +\n", - "-0.25 [1^ 1] +\n", - "1.0 [1^ 1 3^ 3]\n", - "\n", - "-1.0 X2 X3 +\n", - "-1.0 X1 Z2 X3 +\n", - "0.25 Z0 Z2 +\n", - "-0.625 Z2 +\n", - "0.25 Z2 Z3 +\n", - "-0.375 Z0 +\n", - "-0.625 Z3 +\n", - "0.25 Z0 Z1 +\n", - "0.25 Z1 Z3 +\n", - "-1.0 Y2 Y3 +\n", - "1.0 I +\n", - "-0.375 Z1 +\n", - "-1.0 X0 Z1 X2 +\n", - "-1.0 Y1 Z2 Y3 +\n", - "-1.0 Y0 Z1 Y2 +\n", - "-1.0 X0 X1 +\n", - "-1.0 Y0 Y1\n", - "\n", - " (1, 1)\t(0.25+0j)\n", - " (2, 1)\t(-2+0j)\n", - " (4, 1)\t(-2+0j)\n", - " (1, 2)\t(-2+0j)\n", - " (2, 2)\t(0.25+0j)\n", - " (8, 2)\t(-2+0j)\n", - " (3, 3)\t(1.5+0j)\n", - " (6, 3)\t(2+0j)\n", - " (9, 3)\t(-2+0j)\n", - " (1, 4)\t(-2+0j)\n", - " (4, 4)\t(-0.25+0j)\n", - " (8, 4)\t(-2+0j)\n", - " (5, 5)\t(1+0j)\n", - " (6, 5)\t(-2+0j)\n", - " (9, 5)\t(-2+0j)\n", - " (3, 6)\t(2+0j)\n", - " (5, 6)\t(-2+0j)\n", - " (10, 6)\t(-2+0j)\n", - " (12, 6)\t(2+0j)\n", - " (7, 7)\t(2.25+0j)\n", - " (11, 7)\t(-2+0j)\n", - " (13, 7)\t(2+0j)\n", - " (2, 8)\t(-2+0j)\n", - " (4, 8)\t(-2+0j)\n", - " (8, 8)\t(-0.25+0j)\n", - " (3, 9)\t(-2+0j)\n", - " (5, 9)\t(-2+0j)\n", - " (10, 9)\t(-2+0j)\n", - " (12, 9)\t(-2+0j)\n", - " (6, 10)\t(-2+0j)\n", - " (9, 10)\t(-2+0j)\n", - " (10, 10)\t(1+0j)\n", - " (7, 11)\t(-2+0j)\n", - " (11, 11)\t(2.25+0j)\n", - " (14, 11)\t(2+0j)\n", - " (6, 12)\t(2+0j)\n", - " (9, 12)\t(-2+0j)\n", - " (12, 12)\t(0.5+0j)\n", - " (7, 13)\t(2+0j)\n", - " (13, 13)\t(1.75+0j)\n", - " (14, 13)\t(-2+0j)\n", - " (11, 14)\t(2+0j)\n", - " (13, 14)\t(-2+0j)\n", - " (14, 14)\t(1.75+0j)\n", - " (15, 15)\t(4+0j)\n", - "\n", - "Energy of the model is -4.01556443707 in units of T and J.\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.transforms import get_sparse_operator, jordan_wigner\n", "from fermilib.utils import fermi_hubbard, get_ground_state\n", @@ -576,40 +369,11 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-0.0795774715459 Z0 Z2 +\n", - "-0.0795774715459 Z0 Z1 +\n", - "-9.710449458 Z2 +\n", - "-9.710449458 Z0 +\n", - "-0.0795774715459 Z1 Z2 +\n", - "19.5004763875 I +\n", - "0.159154943092 Z1\n", - "\n", - "-0.0795774715459 Z0 Z2 +\n", - "-3.2898681337 Y1 Y2 +\n", - "-6.4205813243 Z2 +\n", - "-0.0795774715459 Z1 Z2 +\n", - "-6.4205813243 Z0 +\n", - "-3.2898681337 Y0 Y1 +\n", - "-0.0795774715459 Z0 Z1 +\n", - "19.5004763875 I +\n", - "-6.4205813243 Z1 +\n", - "-3.2898681337 X0 Z1 X2 +\n", - "-3.2898681337 X1 X2 +\n", - "-3.2898681337 Y0 Z1 Y2 +\n", - "-3.2898681337 X0 X1\n", - "\n", - "[ 3.45556916e-15 3.59434704e-15 7.10542736e-15 -7.10542736e-15\n", - " 7.10542736e-15 -7.10542736e-15 -7.10542736e-15 -7.10542736e-15]\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.utils import eigenspectrum, fourier_transform, jellium_model\n", "from fermilib.transforms import jordan_wigner\n", @@ -656,23 +420,11 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Molecule has automatically generated name H2_sto-3g_singlet_0.7414\n", - "Information about this molecule would be saved at:\n", - "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/fermilib/data/H2_sto-3g_singlet_0.7414\n", - "\n", - "This molecule has 2 atoms and 2 electrons.\n", - "Contains H atom, which has 1 protons.\n", - "Contains H atom, which has 1 protons.\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.utils import MolecularData\n", "\n", @@ -707,233 +459,11 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.3\n", - "\n", - "At bond length of 0.3 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.593851554941 Hartree.\n", - "MP2 energy of -0.599804158066 Hartree.\n", - "FCI energy of -0.601803716835 Hartree.\n", - "Nuclear repulsion energy between protons is 1.76392402863 Hartree.\n", - "Spatial orbital 0 has energy of -0.802890409068 Hartree.\n", - "Spatial orbital 1 has energy of 1.36924734526 Hartree.\n", - "0.4\n", - "\n", - "At bond length of 0.4 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.904395312328 Hartree.\n", - "MP2 energy of -0.911467754695 Hartree.\n", - "FCI energy of -0.914149708214 Hartree.\n", - "Nuclear repulsion energy between protons is 1.32294302147 Hartree.\n", - "Spatial orbital 0 has energy of -0.745246447905 Hartree.\n", - "Spatial orbital 1 has energy of 1.16777664803 Hartree.\n", - "0.5\n", - "\n", - "At bond length of 0.5 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.04303961109 Hartree.\n", - "MP2 energy of -1.05152614945 Hartree.\n", - "FCI energy of -1.0551597965 Hartree.\n", - "Nuclear repulsion energy between protons is 1.05835441718 Hartree.\n", - "Spatial orbital 0 has energy of -0.690865662093 Hartree.\n", - "Spatial orbital 1 has energy of 0.988958399019 Hartree.\n", - "0.6\n", - "\n", - "At bond length of 0.6 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.10117934458 Hartree.\n", - "MP2 energy of -1.11137987752 Hartree.\n", - "FCI energy of -1.11628600783 Hartree.\n", - "Nuclear repulsion energy between protons is 0.881962014317 Hartree.\n", - "Spatial orbital 0 has energy of -0.64092736584 Hartree.\n", - "Spatial orbital 1 has energy of 0.83829343979 Hartree.\n", - "0.7\n", - "\n", - "At bond length of 0.7 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.1174083919 Hartree.\n", - "MP2 energy of -1.12963750059 Hartree.\n", - "FCI energy of -1.13618945427 Hartree.\n", - "Nuclear repulsion energy between protons is 0.755967440843 Hartree.\n", - "Spatial orbital 0 has energy of -0.595522828508 Hartree.\n", - "Spatial orbital 1 has energy of 0.714336975594 Hartree.\n", - "0.8\n", - "\n", - "At bond length of 0.8 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.11091887541 Hartree.\n", - "MP2 energy of -1.12551730275 Hartree.\n", - "FCI energy of -1.13414766636 Hartree.\n", - "Nuclear repulsion energy between protons is 0.661471510737 Hartree.\n", - "Spatial orbital 0 has energy of -0.554564358191 Hartree.\n", - "Spatial orbital 1 has energy of 0.612776410591 Hartree.\n", - "0.9\n", - "\n", - "At bond length of 0.9 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.09199144053 Hartree.\n", - "MP2 energy of -1.10934327532 Hartree.\n", - "FCI energy of -1.12056028062 Hartree.\n", - "Nuclear repulsion energy between protons is 0.587974676211 Hartree.\n", - "Spatial orbital 0 has energy of -0.517745431384 Hartree.\n", - "Spatial orbital 1 has energy of 0.528627871619 Hartree.\n", - "1.0\n", - "\n", - "At bond length of 1.0 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.06619369707 Hartree.\n", - "MP2 energy of -1.08674279388 Hartree.\n", - "FCI energy of -1.1011503293 Hartree.\n", - "Nuclear repulsion energy between protons is 0.52917720859 Hartree.\n", - "Spatial orbital 0 has energy of -0.48452672795 Hartree.\n", - "Spatial orbital 1 has energy of 0.457644066645 Hartree.\n", - "1.1\n", - "\n", - "At bond length of 1.1 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.03662981386 Hartree.\n", - "MP2 energy of -1.06088768473 Hartree.\n", - "FCI energy of -1.07919294388 Hartree.\n", - "Nuclear repulsion energy between protons is 0.481070189627 Hartree.\n", - "Spatial orbital 0 has energy of -0.45430963304 Hartree.\n", - "Spatial orbital 1 has energy of 0.396828309572 Hartree.\n", - "1.2\n", - "\n", - "At bond length of 1.2 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -1.00520185419 Hartree.\n", - "MP2 energy of -1.03374575892 Hartree.\n", - "FCI energy of -1.05674074513 Hartree.\n", - "Nuclear repulsion energy between protons is 0.440981007158 Hartree.\n", - "Spatial orbital 0 has energy of -0.426597790028 Hartree.\n", - "Spatial orbital 1 has energy of 0.344249090867 Hartree.\n", - "1.3\n", - "\n", - "At bond length of 1.3 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.973208671136 Hartree.\n", - "MP2 energy of -1.00667381945 Hartree.\n", - "FCI energy of -1.03518626525 Hartree.\n", - "Nuclear repulsion energy between protons is 0.407059391223 Hartree.\n", - "Spatial orbital 0 has energy of -0.401044573336 Hartree.\n", - "Spatial orbital 1 has energy of 0.298626047659 Hartree.\n", - "1.4\n", - "\n", - "At bond length of 1.4 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.941580772706 Hartree.\n", - "MP2 energy of -0.98065094828 Hartree.\n", - "FCI energy of -1.01546824814 Hartree.\n", - "Nuclear repulsion energy between protons is 0.377983720421 Hartree.\n", - "Spatial orbital 0 has energy of -0.377422943892 Hartree.\n", - "Spatial orbital 1 has energy of 0.259004715609 Hartree.\n", - "1.5\n", - "\n", - "At bond length of 1.5 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.910975250909 Hartree.\n", - "MP2 energy of -0.956373936315 Hartree.\n", - "FCI energy of -0.998149352414 Hartree.\n", - "Nuclear repulsion energy between protons is 0.352784805727 Hartree.\n", - "Spatial orbital 0 has energy of -0.355579186311 Hartree.\n", - "Spatial orbital 1 has energy of 0.224589908377 Hartree.\n", - "1.6\n", - "\n", - "At bond length of 1.6 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.881835384954 Hartree.\n", - "MP2 energy of -0.934317377808 Hartree.\n", - "FCI energy of -0.983472728093 Hartree.\n", - "Nuclear repulsion energy between protons is 0.330735755369 Hartree.\n", - "Spatial orbital 0 has energy of -0.335399287591 Hartree.\n", - "Spatial orbital 1 has energy of 0.19468565862 Hartree.\n", - "1.7\n", - "\n", - "At bond length of 1.7 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.854441340558 Hartree.\n", - "MP2 energy of -0.914784020472 Hartree.\n", - "FCI energy of -0.971426687651 Hartree.\n", - "Nuclear repulsion energy between protons is 0.311280710935 Hartree.\n", - "Spatial orbital 0 has energy of -0.316789759689 Hartree.\n", - "Spatial orbital 1 has energy of 0.168679804458 Hartree.\n", - "1.8\n", - "\n", - "At bond length of 1.8 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.828951848102 Hartree.\n", - "MP2 energy of -0.897945462607 Hartree.\n", - "FCI energy of -0.96181695212 Hartree.\n", - "Nuclear repulsion energy between protons is 0.293987338106 Hartree.\n", - "Spatial orbital 0 has energy of -0.299666922341 Hartree.\n", - "Spatial orbital 1 has energy of 0.146038764961 Hartree.\n", - "1.9\n", - "\n", - "At bond length of 1.9 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.805435339988 Hartree.\n", - "MP2 energy of -0.883872297051 Hartree.\n", - "FCI energy of -0.954338853453 Hartree.\n", - "Nuclear repulsion energy between protons is 0.278514320311 Hartree.\n", - "Spatial orbital 0 has energy of -0.28395036219 Hartree.\n", - "Spatial orbital 1 has energy of 0.126301052204 Hartree.\n", - "2.0\n", - "\n", - "At bond length of 2.0 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.783892453682 Hartree.\n", - "MP2 energy of -0.872556138042 Hartree.\n", - "FCI energy of -0.948641111742 Hartree.\n", - "Nuclear repulsion energy between protons is 0.264588604295 Hartree.\n", - "Spatial orbital 0 has energy of -0.26955902366 Hartree.\n", - "Spatial orbital 1 has energy of 0.109068680986 Hartree.\n", - "2.1\n", - "\n", - "At bond length of 2.1 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.764273182159 Hartree.\n", - "MP2 energy of -0.863927009427 Hartree.\n", - "FCI energy of -0.944374680781 Hartree.\n", - "Nuclear repulsion energy between protons is 0.251989146948 Hartree.\n", - "Spatial orbital 0 has energy of -0.256409590904 Hartree.\n", - "Spatial orbital 1 has energy of 0.093998305957 Hartree.\n", - "2.2\n", - "\n", - "At bond length of 2.2 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.746491196634 Hartree.\n", - "MP2 energy of -0.857868469494 Hartree.\n", - "FCI energy of -0.941224033433 Hartree.\n", - "Nuclear repulsion energy between protons is 0.240535094814 Hartree.\n", - "Spatial orbital 0 has energy of -0.244416839704 Hartree.\n", - "Spatial orbital 1 has energy of 0.0807934685947 Hartree.\n", - "2.3\n", - "\n", - "At bond length of 2.3 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.730436414465 Hartree.\n", - "MP2 energy of -0.854231200007 Hartree.\n", - "FCI energy of -0.93892238579 Hartree.\n", - "Nuclear repulsion energy between protons is 0.230077047213 Hartree.\n", - "Spatial orbital 0 has energy of -0.233495303648 Hartree.\n", - "Spatial orbital 1 has energy of 0.0691983328045 Hartree.\n", - "2.4\n", - "\n", - "At bond length of 2.4 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.715985774144 Hartree.\n", - "MP2 energy of -0.852844698711 Hartree.\n", - "FCI energy of -0.937254952861 Hartree.\n", - "Nuclear repulsion energy between protons is 0.220490503579 Hartree.\n", - "Spatial orbital 0 has energy of -0.223561412278 Hartree.\n", - "Spatial orbital 1 has energy of 0.0589926313773 Hartree.\n", - "2.5\n", - "\n", - "At bond length of 2.5 Bohr, molecular hydrogen has:\n", - "Hartree-Fock energy of -0.703011764611 Hartree.\n", - "MP2 energy of -0.853526496891 Hartree.\n", - "FCI energy of -0.936054919844 Hartree.\n", - "Nuclear repulsion energy between protons is 0.211670883436 Hartree.\n", - "Spatial orbital 0 has energy of -0.21453535802 Hartree.\n", - "Spatial orbital 1 has energy of 0.0499873498974 Hartree.\n" - ] - }, - { - "data": { - "image/png": "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\nRK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "# Set molecule parameters.\n", "basis = 'sto-3g'\n", @@ -1001,75 +531,11 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The Jordan-Wigner Hamiltonian in canonical basis follows:\n", - "0.0129100761958 X1 Z2 X3 +\n", - "0.0115361435289 Z0 X1 Z2 X3 +\n", - "-0.0132438348161 Z2 +\n", - "-0.00137428724779 Y0 Z1 Y2 Z3 +\n", - "0.0115361435289 Z0 Y1 Z2 Y3 +\n", - "0.124447812019 Z0 Z1 +\n", - "-0.00137428724779 Y1 Y3 +\n", - "-0.00137428724779 X0 Z1 X2 Z3 +\n", - "-0.00293288657488 X0 X1 Y2 Y3 +\n", - "0.161994863897 Z0 +\n", - "0.0541304464268 Z1 Z3 +\n", - "0.161994863897 Z1 +\n", - "0.0129100761958 X0 Z1 X2 +\n", - "0.0115361435289 X0 X2 +\n", - "0.0129100761958 Y0 Z1 Y2 +\n", - "0.0541304464268 Z0 Z2 +\n", - "0.0847961325554 Z2 Z3 +\n", - "0.00293288657488 Y0 X1 X2 Y3 +\n", - "-0.0132438348161 Z3 +\n", - "0.0570633330017 Z1 Z2 +\n", - "0.0129100761958 Y1 Z2 Y3 +\n", - "0.0115361435289 Y0 Y2 +\n", - "0.0570633330017 Z0 Z3 +\n", - "-0.00293288657488 Y0 Y1 X2 X3 +\n", - "-7.498946774 I +\n", - "0.00293288657488 X0 Y1 Y2 X3 +\n", - "-0.00137428724779 X1 X3\n", - "Ground state energy before rotation is -7.86277316111 Hartree.\n", - "\n", - "The Jordan-Wigner Hamiltonian in rotated basis follows:\n", - "-0.0863349915556 X1 Z2 X3 +\n", - "-0.0174908737798 Z0 X1 Z2 X3 +\n", - "0.0546248263978 Z2 +\n", - "-0.0174908737798 X0 X2 +\n", - "-0.0174908737798 Z0 Y1 Z2 Y3 +\n", - "0.0966021127867 Z0 Z1 +\n", - "-0.00147576425935 Y1 Y3 +\n", - "-0.00147576425935 X0 Z1 X2 Z3 +\n", - "-0.0226400847646 X0 X1 Y2 Y3 +\n", - "0.0941262026827 Z0 +\n", - "0.0541304464268 Z1 Z3 +\n", - "0.0941262026827 Z1 +\n", - "-0.0863349915556 X0 Z1 X2 +\n", - "-0.00147576425935 Y0 Z1 Y2 Z3 +\n", - "-0.0863349915556 Y0 Z1 Y2 +\n", - "0.0541304464268 Z0 Z2 +\n", - "0.0732274354081 Z2 Z3 +\n", - "0.0226400847646 Y0 X1 X2 Y3 +\n", - "0.0546248263978 Z3 +\n", - "0.0767705311914 Z1 Z2 +\n", - "-0.0863349915556 Y1 Z2 Y3 +\n", - "-0.0174908737798 Y0 Y2 +\n", - "0.0767705311914 Z0 Z3 +\n", - "-0.0226400847646 Y0 Y1 X2 X3 +\n", - "-7.498946774 I +\n", - "0.0226400847646 X0 Y1 Y2 X3 +\n", - "-0.00147576425935 X1 X3\n", - "Ground state energy after rotation is -7.86277316111 Hartree.\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from fermilib.transforms import get_fermion_operator, get_sparse_operator, jordan_wigner\n", "from fermilib.utils import get_ground_state, MolecularData\n", @@ -1146,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1173,7 +639,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1205,7 +671,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1248,27 +714,11 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Optimization terminated successfully.\n", - " Current function value: -1.137270\n", - " Iterations: 1\n", - " Function evaluations: 12\n", - " Gradient evaluations: 3\n", - "\n", - "Optimal UCCSD Singlet Energy: -1.13727017463\n", - "Optimal UCCSD Singlet Amplitudes: [ -8.06257427e-09 5.65340603e-02]\n", - "Classical CCSD Energy: -1.13727017465 Hartrees\n", - "Exact FCI Energy: -1.13727017463 Hartrees\n", - "Initial Energy of UCCSD with CCSD amplitudes: -1.13726981456 Hartrees\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "n_amplitudes = uccsd_singlet_paramsize(molecule.n_qubits, molecule.n_electrons)\n", "initial_amplitudes = [0, 0.05677]\n", @@ -1295,178 +745,11 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Allocate | Qubit[1]\n", - "X | Qubit[1]\n", - "Allocate | Qubit[2]\n", - "Allocate | Qubit[3]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[1]\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(12.5663706063) | Qubit[3]\n", - "Allocate | Qubit[0]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "X | Qubit[0]\n", - "Rx(10.9955742876) | Qubit[1]\n", - "H | Qubit[1]\n", - "Rx(1.57079632679) | Qubit[2]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(12.5381035842) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "Rx(10.9955742876) | Qubit[0]\n", - "H | Qubit[1]\n", - "H | Qubit[1]\n", - "Rx(10.9955742876) | Qubit[2]\n", - "Rx(1.57079632679) | Qubit[2]\n", - "Rx(10.9955742876) | Qubit[3]\n", - "H | Qubit[3]\n", - "H | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(12.5381035842) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "H | Qubit[1]\n", - "Rx(10.9955742876) | Qubit[2]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[3]\n", - "H | Qubit[1]\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(8.0625742705e-09) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "H | Qubit[0]\n", - "H | Qubit[1]\n", - "Rx(1.57079632679) | Qubit[1]\n", - "H | Qubit[2]\n", - "Rx(10.9955742876) | Qubit[3]\n", - "H | Qubit[3]\n", - "H | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(0.028267030141) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "H | Qubit[0]\n", - "Rx(10.9955742876) | Qubit[1]\n", - "H | Qubit[1]\n", - "H | Qubit[2]\n", - "H | Qubit[2]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[3]\n", - "H | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(12.5381035842) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "H | Qubit[0]\n", - "H | Qubit[1]\n", - "H | Qubit[1]\n", - "H | Qubit[2]\n", - "H | Qubit[2]\n", - "Rx(10.9955742876) | Qubit[3]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(0.028267030141) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "Rx(10.9955742876) | Qubit[0]\n", - "H | Qubit[1]\n", - "H | Qubit[2]\n", - "H | Qubit[2]\n", - "Rx(1.57079632679) | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "Rz(12.5663706063) | Qubit[2]\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "Rx(10.9955742876) | Qubit[0]\n", - "H | Qubit[2]\n", - "Rx(1.57079632679) | Qubit[2]\n", - "H | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "Rz(8.0625742705e-09) | Qubit[2]\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "H | Qubit[0]\n", - "Rx(1.57079632679) | Qubit[1]\n", - "Rx(10.9955742876) | Qubit[2]\n", - "Rx(1.57079632679) | Qubit[2]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[3]\n", - "H | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(12.5381035842) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "H | Qubit[0]\n", - "Rx(10.9955742876) | Qubit[1]\n", - "Rx(1.57079632679) | Qubit[1]\n", - "Rx(10.9955742876) | Qubit[2]\n", - "Rx(1.57079632679) | Qubit[2]\n", - "Rx(10.9955742876) | Qubit[3]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(0.028267030141) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "Rx(10.9955742876) | Qubit[0]\n", - "Rx(10.9955742876) | Qubit[1]\n", - "Rx(1.57079632679) | Qubit[1]\n", - "Rx(10.9955742876) | Qubit[2]\n", - "H | Qubit[2]\n", - "H | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[3]\n", - "Rx(1.57079632679) | Qubit[0]\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "Rz(0.028267030141) | Qubit[3]\n", - "CX | ( Qubit[2], Qubit[3] )\n", - "CX | ( Qubit[1], Qubit[2] )\n", - "CX | ( Qubit[0], Qubit[1] )\n", - "Rx(10.9955742876) | Qubit[0]\n", - "Rx(10.9955742876) | Qubit[1]\n", - "H | Qubit[2]\n", - "Rx(10.9955742876) | Qubit[3]\n" - ] - } - ], + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "compiler_engine = uccsd_trotter_engine(CommandPrinter())\n", "wavefunction = compiler_engine.allocate_qureg(molecule.n_qubits)\n", @@ -1484,21 +767,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.13" + "pygments_lexer": "ipython3", + "version": "3.6.0" } }, "nbformat": 4, From 94d31eeef4c2963c0246c29ccabb6cbda1e47a8e Mon Sep 17 00:00:00 2001 From: Ryan Babbush Date: Mon, 8 May 2017 18:11:25 -0700 Subject: [PATCH 2/2] updated demo to have output. --- examples/fermilib_demo.ipynb | 897 +++++++++++++++++++++++++++++++---- 1 file changed, 806 insertions(+), 91 deletions(-) diff --git a/examples/fermilib_demo.ipynb b/examples/fermilib_demo.ipynb index afbf92f..a3867e8 100644 --- a/examples/fermilib_demo.ipynb +++ b/examples/fermilib_demo.ipynb @@ -45,11 +45,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 [3^ 1]\n", + "1.0 [3^ 1]\n" + ] + } + ], "source": [ "from fermilib.ops import FermionOperator\n", "\n", @@ -69,11 +76,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-1.7 [3^ 1]\n", + "-1.7 [3^ 1]\n", + "1.0 []\n", + "0\n" + ] + } + ], "source": [ "good_way_to_initialize = FermionOperator('3^ 1', -1.7)\n", "print(good_way_to_initialize)\n", @@ -97,11 +113,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1+2j) [4^ 1^ 3 9]\n", + "{((4, 1), (1, 1), (3, 0), (9, 0)): (1+2j)}\n" + ] + } + ], "source": [ "my_operator = FermionOperator('4^ 1^ 3 9', 1. + 2.j)\n", "print(my_operator)\n", @@ -118,11 +141,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1+2j) [4^ 3^ 9 1] +\n", + "-1.7 [3^ 1]\n", + "\n", + "(1+2j) [4^ 3^ 9 1] +\n", + "-1.7 [3^ 1]\n" + ] + } + ], "source": [ "from fermilib.ops import FermionOperator\n", "\n", @@ -147,11 +180,32 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1+2j) [4^ 3^ 9 1] +\n", + "56.1 [3^ 1]\n", + "\n", + "(-302.3229-604.6458j) [3^ 1 3^ 1 4^ 3^ 9 1] +\n", + "(9.1613+18.3226j) [4^ 3^ 9 1 3^ 1 3^ 1] +\n", + "(16.167-21.556j) [4^ 3^ 9 1 3^ 1 4^ 3^ 9 1] +\n", + "(-302.3229-604.6458j) [3^ 1 4^ 3^ 9 1 3^ 1] +\n", + "(-34.87-6.34j) [4^ 3^ 9 1 4^ 3^ 9 1 4^ 3^ 9 1] +\n", + "(16.167-21.556j) [4^ 3^ 9 1 4^ 3^ 9 1 3^ 1] +\n", + "513.94893 [3^ 1 3^ 1 3^ 1] +\n", + "(-533.511+711.348j) [3^ 1 4^ 3^ 9 1 4^ 3^ 9 1]\n", + "\n", + "-4.913 [3^ 1 3^ 1 3^ 1]\n", + "\n", + "True\n", + "False\n" + ] + } + ], "source": [ "term_1 = FermionOperator('4^ 3^ 9 1', 1. + 2.j)\n", "term_2 = FermionOperator('3^ 1', -1.7)\n", @@ -180,11 +234,28 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1-2j) [3 3^ 4]\n", + "False\n", + "5\n", + "\n", + "(-1-2j) [4^ 3^ 3] +\n", + "(1+2j) [4^]\n", + "True\n", + "\n", + "(3-4j) [4^ 4^ 3 3^] +\n", + "(-3+4j) [4^ 3 3^ 4^] +\n", + "(3-4j) [4^ 3 3^ 4^ 3^ 3] +\n", + "(-3+4j) [4^ 3^ 3 4^ 3 3^]\n" + ] + } + ], "source": [ "from fermilib.ops import hermitian_conjugated, normal_ordered\n", "from fermilib.utils import commutator, count_qubits\n", @@ -216,11 +287,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 X1 Y2 Z3\n", + "{((1, 'X'), (2, 'Y'), (3, 'Z')): 1.0}\n", + "\n", + "-77.0 X1 Y2 Z3 +\n", + "3.17 X3 Z4\n" + ] + } + ], "source": [ "from projectq.ops import QubitOperator\n", "\n", @@ -244,11 +325,26 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.17 [2^ 0] +\n", + "3.17 [0^ 2]\n", + "\n", + "(1.585+0j) Y0 Z1 Y2 +\n", + "(1.585+0j) X0 Z1 X2\n", + "[-3.17 -3.17 0. 0. 0. 0. 3.17 3.17]\n", + "\n", + "(-1.585+0j) Y0 Y1 +\n", + "(-1.585+0j) X0 X1 Z2\n", + "[-3.17 -3.17 0. 0. 0. 0. 3.17 3.17]\n" + ] + } + ], "source": [ "from fermilib.ops import FermionOperator, hermitian_conjugated\n", "from fermilib.transforms import jordan_wigner, bravyi_kitaev\n", @@ -283,11 +379,34 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "88.0 X0 Y1 Z2 +\n", + "3.17 Z1 Z4\n", + "\n", + "-6.34 [4^ 4] +\n", + "176j [2^ 2 1 0] +\n", + "88j [1 0^] +\n", + "-88j [1 0] +\n", + "-88j [1^ 0^] +\n", + "12.68 [4^ 4 1^ 1] +\n", + "3.17 [] +\n", + "-176j [2^ 2 1 0^] +\n", + "88j [1^ 0] +\n", + "-6.34 [1^ 1] +\n", + "-176j [2^ 2 1^ 0] +\n", + "176j [2^ 2 1^ 0^]\n", + "\n", + "88.0 X0 Y1 Z2 +\n", + "3.17 Z1 Z4\n" + ] + } + ], "source": [ "from fermilib.transforms import reverse_jordan_wigner\n", "\n", @@ -318,11 +437,99 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.25 [2^ 2] +\n", + "1.0 [2^ 2 3^ 3] +\n", + "-2.0 [0^ 1] +\n", + "-2.0 [1^ 3] +\n", + "-2.0 [3^ 2] +\n", + "0.25 [3^ 3] +\n", + "1.0 [0^ 0 1^ 1] +\n", + "-2.0 [2^ 3] +\n", + "-2.0 [0^ 2] +\n", + "-2.0 [3^ 1] +\n", + "0.0 [] +\n", + "-2.0 [1^ 0] +\n", + "-2.0 [2^ 0] +\n", + "-0.25 [0^ 0] +\n", + "1.0 [0^ 0 2^ 2] +\n", + "-0.25 [1^ 1] +\n", + "1.0 [1^ 1 3^ 3]\n", + "\n", + "-1.0 X2 X3 +\n", + "-1.0 X1 Z2 X3 +\n", + "0.25 Z0 Z2 +\n", + "-0.625 Z2 +\n", + "0.25 Z2 Z3 +\n", + "-0.375 Z0 +\n", + "-0.625 Z3 +\n", + "0.25 Z0 Z1 +\n", + "0.25 Z1 Z3 +\n", + "-1.0 Y2 Y3 +\n", + "1.0 I +\n", + "-0.375 Z1 +\n", + "-1.0 X0 Z1 X2 +\n", + "-1.0 Y1 Z2 Y3 +\n", + "-1.0 Y0 Z1 Y2 +\n", + "-1.0 X0 X1 +\n", + "-1.0 Y0 Y1\n", + "\n", + " (1, 1)\t(0.25+0j)\n", + " (2, 1)\t(-2+0j)\n", + " (4, 1)\t(-2+0j)\n", + " (1, 2)\t(-2+0j)\n", + " (2, 2)\t(0.25+0j)\n", + " (8, 2)\t(-2+0j)\n", + " (3, 3)\t(1.5+0j)\n", + " (6, 3)\t(2+0j)\n", + " (9, 3)\t(-2+0j)\n", + " (1, 4)\t(-2+0j)\n", + " (4, 4)\t(-0.25+0j)\n", + " (8, 4)\t(-2+0j)\n", + " (5, 5)\t(1+0j)\n", + " (6, 5)\t(-2+0j)\n", + " (9, 5)\t(-2+0j)\n", + " (3, 6)\t(2+0j)\n", + " (5, 6)\t(-2+0j)\n", + " (10, 6)\t(-2+0j)\n", + " (12, 6)\t(2+0j)\n", + " (7, 7)\t(2.25+0j)\n", + " (11, 7)\t(-2+0j)\n", + " (13, 7)\t(2+0j)\n", + " (2, 8)\t(-2+0j)\n", + " (4, 8)\t(-2+0j)\n", + " (8, 8)\t(-0.25+0j)\n", + " (3, 9)\t(-2+0j)\n", + " (5, 9)\t(-2+0j)\n", + " (10, 9)\t(-2+0j)\n", + " (12, 9)\t(-2+0j)\n", + " (6, 10)\t(-2+0j)\n", + " (9, 10)\t(-2+0j)\n", + " (10, 10)\t(1+0j)\n", + " (7, 11)\t(-2+0j)\n", + " (11, 11)\t(2.25+0j)\n", + " (14, 11)\t(2+0j)\n", + " (6, 12)\t(2+0j)\n", + " (9, 12)\t(-2+0j)\n", + " (12, 12)\t(0.5+0j)\n", + " (7, 13)\t(2+0j)\n", + " (13, 13)\t(1.75+0j)\n", + " (14, 13)\t(-2+0j)\n", + " (11, 14)\t(2+0j)\n", + " (13, 14)\t(-2+0j)\n", + " (14, 14)\t(1.75+0j)\n", + " (15, 15)\t(4+0j)\n", + "\n", + "Energy of the model is -4.01556443707 in units of T and J.\n" + ] + } + ], "source": [ "from fermilib.transforms import get_sparse_operator, jordan_wigner\n", "from fermilib.utils import fermi_hubbard, get_ground_state\n", @@ -369,11 +576,40 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.0795774715459 Z0 Z2 +\n", + "-0.0795774715459 Z0 Z1 +\n", + "-9.710449458 Z2 +\n", + "-9.710449458 Z0 +\n", + "-0.0795774715459 Z1 Z2 +\n", + "19.5004763875 I +\n", + "0.159154943092 Z1\n", + "\n", + "-0.0795774715459 Z0 Z2 +\n", + "-3.2898681337 Y1 Y2 +\n", + "-6.4205813243 Z2 +\n", + "-0.0795774715459 Z1 Z2 +\n", + "-6.4205813243 Z0 +\n", + "-3.2898681337 Y0 Y1 +\n", + "-0.0795774715459 Z0 Z1 +\n", + "19.5004763875 I +\n", + "-6.4205813243 Z1 +\n", + "-3.2898681337 X0 Z1 X2 +\n", + "-3.2898681337 X1 X2 +\n", + "-3.2898681337 Y0 Z1 Y2 +\n", + "-3.2898681337 X0 X1\n", + "\n", + "[ 3.45556916e-15 3.59434704e-15 3.55271368e-15 -7.10542736e-15\n", + " 7.10542736e-15 -7.10542736e-15 -7.10542736e-15 -7.10542736e-15]\n" + ] + } + ], "source": [ "from fermilib.utils import eigenspectrum, fourier_transform, jellium_model\n", "from fermilib.transforms import jordan_wigner\n", @@ -420,11 +656,23 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Molecule has automatically generated name H2_sto-3g_singlet_0.7414\n", + "Information about this molecule would be saved at:\n", + "/Users/ryanbabbush/Desktop/FermiLib-1/src/fermilib/data/H2_sto-3g_singlet_0.7414\n", + "\n", + "This molecule has 2 atoms and 2 electrons.\n", + "Contains H atom, which has 1 protons.\n", + "Contains H atom, which has 1 protons.\n" + ] + } + ], "source": [ "from fermilib.utils import MolecularData\n", "\n", @@ -459,11 +707,233 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3\n", + "\n", + "At bond length of 0.3 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.593851554941 Hartree.\n", + "MP2 energy of -0.599804158066 Hartree.\n", + "FCI energy of -0.601803716835 Hartree.\n", + "Nuclear repulsion energy between protons is 1.76392402863 Hartree.\n", + "Spatial orbital 0 has energy of -0.802890409068 Hartree.\n", + "Spatial orbital 1 has energy of 1.36924734526 Hartree.\n", + "0.4\n", + "\n", + "At bond length of 0.4 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.904395312328 Hartree.\n", + "MP2 energy of -0.911467754695 Hartree.\n", + "FCI energy of -0.914149708214 Hartree.\n", + "Nuclear repulsion energy between protons is 1.32294302147 Hartree.\n", + "Spatial orbital 0 has energy of -0.745246447905 Hartree.\n", + "Spatial orbital 1 has energy of 1.16777664803 Hartree.\n", + "0.5\n", + "\n", + "At bond length of 0.5 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.04303961109 Hartree.\n", + "MP2 energy of -1.05152614945 Hartree.\n", + "FCI energy of -1.0551597965 Hartree.\n", + "Nuclear repulsion energy between protons is 1.05835441718 Hartree.\n", + "Spatial orbital 0 has energy of -0.690865662093 Hartree.\n", + "Spatial orbital 1 has energy of 0.988958399019 Hartree.\n", + "0.6\n", + "\n", + "At bond length of 0.6 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.10117934458 Hartree.\n", + "MP2 energy of -1.11137987752 Hartree.\n", + "FCI energy of -1.11628600783 Hartree.\n", + "Nuclear repulsion energy between protons is 0.881962014317 Hartree.\n", + "Spatial orbital 0 has energy of -0.64092736584 Hartree.\n", + "Spatial orbital 1 has energy of 0.83829343979 Hartree.\n", + "0.7\n", + "\n", + "At bond length of 0.7 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.1174083919 Hartree.\n", + "MP2 energy of -1.12963750059 Hartree.\n", + "FCI energy of -1.13618945427 Hartree.\n", + "Nuclear repulsion energy between protons is 0.755967440843 Hartree.\n", + "Spatial orbital 0 has energy of -0.595522828508 Hartree.\n", + "Spatial orbital 1 has energy of 0.714336975594 Hartree.\n", + "0.8\n", + "\n", + "At bond length of 0.8 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.11091887541 Hartree.\n", + "MP2 energy of -1.12551730275 Hartree.\n", + "FCI energy of -1.13414766636 Hartree.\n", + "Nuclear repulsion energy between protons is 0.661471510737 Hartree.\n", + "Spatial orbital 0 has energy of -0.554564358191 Hartree.\n", + "Spatial orbital 1 has energy of 0.612776410591 Hartree.\n", + "0.9\n", + "\n", + "At bond length of 0.9 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.09199144053 Hartree.\n", + "MP2 energy of -1.10934327532 Hartree.\n", + "FCI energy of -1.12056028062 Hartree.\n", + "Nuclear repulsion energy between protons is 0.587974676211 Hartree.\n", + "Spatial orbital 0 has energy of -0.517745431384 Hartree.\n", + "Spatial orbital 1 has energy of 0.528627871619 Hartree.\n", + "1.0\n", + "\n", + "At bond length of 1.0 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.06619369707 Hartree.\n", + "MP2 energy of -1.08674279388 Hartree.\n", + "FCI energy of -1.1011503293 Hartree.\n", + "Nuclear repulsion energy between protons is 0.52917720859 Hartree.\n", + "Spatial orbital 0 has energy of -0.48452672795 Hartree.\n", + "Spatial orbital 1 has energy of 0.457644066645 Hartree.\n", + "1.1\n", + "\n", + "At bond length of 1.1 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.03662981386 Hartree.\n", + "MP2 energy of -1.06088768473 Hartree.\n", + "FCI energy of -1.07919294388 Hartree.\n", + "Nuclear repulsion energy between protons is 0.481070189627 Hartree.\n", + "Spatial orbital 0 has energy of -0.45430963304 Hartree.\n", + "Spatial orbital 1 has energy of 0.396828309572 Hartree.\n", + "1.2\n", + "\n", + "At bond length of 1.2 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -1.00520185419 Hartree.\n", + "MP2 energy of -1.03374575892 Hartree.\n", + "FCI energy of -1.05674074513 Hartree.\n", + "Nuclear repulsion energy between protons is 0.440981007158 Hartree.\n", + "Spatial orbital 0 has energy of -0.426597790028 Hartree.\n", + "Spatial orbital 1 has energy of 0.344249090867 Hartree.\n", + "1.3\n", + "\n", + "At bond length of 1.3 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.973208671136 Hartree.\n", + "MP2 energy of -1.00667381945 Hartree.\n", + "FCI energy of -1.03518626525 Hartree.\n", + "Nuclear repulsion energy between protons is 0.407059391223 Hartree.\n", + "Spatial orbital 0 has energy of -0.401044573336 Hartree.\n", + "Spatial orbital 1 has energy of 0.298626047659 Hartree.\n", + "1.4\n", + "\n", + "At bond length of 1.4 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.941580772706 Hartree.\n", + "MP2 energy of -0.98065094828 Hartree.\n", + "FCI energy of -1.01546824814 Hartree.\n", + "Nuclear repulsion energy between protons is 0.377983720421 Hartree.\n", + "Spatial orbital 0 has energy of -0.377422943892 Hartree.\n", + "Spatial orbital 1 has energy of 0.259004715609 Hartree.\n", + "1.5\n", + "\n", + "At bond length of 1.5 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.910975250909 Hartree.\n", + "MP2 energy of -0.956373936315 Hartree.\n", + "FCI energy of -0.998149352414 Hartree.\n", + "Nuclear repulsion energy between protons is 0.352784805727 Hartree.\n", + "Spatial orbital 0 has energy of -0.355579186311 Hartree.\n", + "Spatial orbital 1 has energy of 0.224589908377 Hartree.\n", + "1.6\n", + "\n", + "At bond length of 1.6 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.881835384954 Hartree.\n", + "MP2 energy of -0.934317377808 Hartree.\n", + "FCI energy of -0.983472728093 Hartree.\n", + "Nuclear repulsion energy between protons is 0.330735755369 Hartree.\n", + "Spatial orbital 0 has energy of -0.335399287591 Hartree.\n", + "Spatial orbital 1 has energy of 0.19468565862 Hartree.\n", + "1.7\n", + "\n", + "At bond length of 1.7 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.854441340558 Hartree.\n", + "MP2 energy of -0.914784020472 Hartree.\n", + "FCI energy of -0.971426687651 Hartree.\n", + "Nuclear repulsion energy between protons is 0.311280710935 Hartree.\n", + "Spatial orbital 0 has energy of -0.316789759689 Hartree.\n", + "Spatial orbital 1 has energy of 0.168679804458 Hartree.\n", + "1.8\n", + "\n", + "At bond length of 1.8 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.828951848102 Hartree.\n", + "MP2 energy of -0.897945462607 Hartree.\n", + "FCI energy of -0.96181695212 Hartree.\n", + "Nuclear repulsion energy between protons is 0.293987338106 Hartree.\n", + "Spatial orbital 0 has energy of -0.299666922341 Hartree.\n", + "Spatial orbital 1 has energy of 0.146038764961 Hartree.\n", + "1.9\n", + "\n", + "At bond length of 1.9 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.805435339988 Hartree.\n", + "MP2 energy of -0.883872297051 Hartree.\n", + "FCI energy of -0.954338853453 Hartree.\n", + "Nuclear repulsion energy between protons is 0.278514320311 Hartree.\n", + "Spatial orbital 0 has energy of -0.28395036219 Hartree.\n", + "Spatial orbital 1 has energy of 0.126301052204 Hartree.\n", + "2.0\n", + "\n", + "At bond length of 2.0 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.783892453682 Hartree.\n", + "MP2 energy of -0.872556138042 Hartree.\n", + "FCI energy of -0.948641111742 Hartree.\n", + "Nuclear repulsion energy between protons is 0.264588604295 Hartree.\n", + "Spatial orbital 0 has energy of -0.26955902366 Hartree.\n", + "Spatial orbital 1 has energy of 0.109068680986 Hartree.\n", + "2.1\n", + "\n", + "At bond length of 2.1 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.764273182159 Hartree.\n", + "MP2 energy of -0.863927009427 Hartree.\n", + "FCI energy of -0.944374680781 Hartree.\n", + "Nuclear repulsion energy between protons is 0.251989146948 Hartree.\n", + "Spatial orbital 0 has energy of -0.256409590904 Hartree.\n", + "Spatial orbital 1 has energy of 0.093998305957 Hartree.\n", + "2.2\n", + "\n", + "At bond length of 2.2 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.746491196634 Hartree.\n", + "MP2 energy of -0.857868469494 Hartree.\n", + "FCI energy of -0.941224033433 Hartree.\n", + "Nuclear repulsion energy between protons is 0.240535094814 Hartree.\n", + "Spatial orbital 0 has energy of -0.244416839704 Hartree.\n", + "Spatial orbital 1 has energy of 0.0807934685947 Hartree.\n", + "2.3\n", + "\n", + "At bond length of 2.3 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.730436414465 Hartree.\n", + "MP2 energy of -0.854231200007 Hartree.\n", + "FCI energy of -0.93892238579 Hartree.\n", + "Nuclear repulsion energy between protons is 0.230077047213 Hartree.\n", + "Spatial orbital 0 has energy of -0.233495303648 Hartree.\n", + "Spatial orbital 1 has energy of 0.0691983328045 Hartree.\n", + "2.4\n", + "\n", + "At bond length of 2.4 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.715985774144 Hartree.\n", + "MP2 energy of -0.852844698711 Hartree.\n", + "FCI energy of -0.937254952861 Hartree.\n", + "Nuclear repulsion energy between protons is 0.220490503579 Hartree.\n", + "Spatial orbital 0 has energy of -0.223561412278 Hartree.\n", + "Spatial orbital 1 has energy of 0.0589926313773 Hartree.\n", + "2.5\n", + "\n", + "At bond length of 2.5 Bohr, molecular hydrogen has:\n", + "Hartree-Fock energy of -0.703011764611 Hartree.\n", + "MP2 energy of -0.853526496891 Hartree.\n", + "FCI energy of -0.936054919844 Hartree.\n", + "Nuclear repulsion energy between protons is 0.211670883436 Hartree.\n", + "Spatial orbital 0 has energy of -0.21453535802 Hartree.\n", + "Spatial orbital 1 has energy of 0.0499873498974 Hartree.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Set molecule parameters.\n", "basis = 'sto-3g'\n", @@ -531,11 +1001,75 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Jordan-Wigner Hamiltonian in canonical basis follows:\n", + "0.0129100761958 X1 Z2 X3 +\n", + "0.0115361435289 Z0 X1 Z2 X3 +\n", + "-0.0132438348161 Z2 +\n", + "-0.00137428724779 Y0 Z1 Y2 Z3 +\n", + "0.0115361435289 Z0 Y1 Z2 Y3 +\n", + "0.124447812019 Z0 Z1 +\n", + "-0.00137428724779 Y1 Y3 +\n", + "-0.00137428724779 X0 Z1 X2 Z3 +\n", + "-0.00293288657488 X0 X1 Y2 Y3 +\n", + "0.161994863897 Z0 +\n", + "0.0541304464268 Z1 Z3 +\n", + "0.161994863897 Z1 +\n", + "0.0129100761958 X0 Z1 X2 +\n", + "0.0115361435289 X0 X2 +\n", + "0.0129100761958 Y0 Z1 Y2 +\n", + "0.0541304464268 Z0 Z2 +\n", + "0.0847961325554 Z2 Z3 +\n", + "0.00293288657488 Y0 X1 X2 Y3 +\n", + "-0.0132438348161 Z3 +\n", + "0.0570633330017 Z1 Z2 +\n", + "0.0129100761958 Y1 Z2 Y3 +\n", + "0.0115361435289 Y0 Y2 +\n", + "0.0570633330017 Z0 Z3 +\n", + "-0.00293288657488 Y0 Y1 X2 X3 +\n", + "-7.498946774 I +\n", + "0.00293288657488 X0 Y1 Y2 X3 +\n", + "-0.00137428724779 X1 X3\n", + "Ground state energy before rotation is -7.86277316111 Hartree.\n", + "\n", + "The Jordan-Wigner Hamiltonian in rotated basis follows:\n", + "0.0127504730129 X1 Z2 X3 +\n", + "0.0114800701013 Z0 X1 Z2 X3 +\n", + "-0.0132672027097 Z2 +\n", + "0.0114800701013 X0 X2 +\n", + "0.0114800701013 Z0 Y1 Z2 Y3 +\n", + "0.124489731674 Z0 Z1 +\n", + "-0.00135433962328 Y1 Y3 +\n", + "-0.00135433962328 X0 Z1 X2 Z3 +\n", + "-0.00290944190157 X0 X1 Y2 Y3 +\n", + "0.16201823179 Z0 +\n", + "0.0541304464268 Z1 Z3 +\n", + "0.16201823179 Z1 +\n", + "0.0127504730129 X0 Z1 X2 +\n", + "-0.00135433962328 Y0 Z1 Y2 Z3 +\n", + "0.0127504730129 Y0 Z1 Y2 +\n", + "0.0541304464268 Z0 Z2 +\n", + "0.0848011022474 Z2 Z3 +\n", + "0.00290944190157 Y0 X1 X2 Y3 +\n", + "-0.0132672027097 Z3 +\n", + "0.0570398883284 Z1 Z2 +\n", + "0.0127504730129 Y1 Z2 Y3 +\n", + "0.0114800701013 Y0 Y2 +\n", + "0.0570398883284 Z0 Z3 +\n", + "-0.00290944190157 Y0 Y1 X2 X3 +\n", + "-7.498946774 I +\n", + "0.00290944190157 X0 Y1 Y2 X3 +\n", + "-0.00135433962328 X1 X3\n", + "Ground state energy after rotation is -7.86277316111 Hartree.\n" + ] + } + ], "source": [ "from fermilib.transforms import get_fermion_operator, get_sparse_operator, jordan_wigner\n", "from fermilib.utils import get_ground_state, MolecularData\n", @@ -612,7 +1146,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -639,10 +1173,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 7, + "metadata": {}, "outputs": [], "source": [ "# Load the molecule.\n", @@ -671,7 +1203,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "collapsed": true }, @@ -714,11 +1246,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimization terminated successfully.\n", + " Current function value: -1.137270\n", + " Iterations: 1\n", + " Function evaluations: 12\n", + " Gradient evaluations: 3\n", + "\n", + "Optimal UCCSD Singlet Energy: -1.13727017463\n", + "Optimal UCCSD Singlet Amplitudes: [ -8.06257427e-09 5.65340603e-02]\n", + "Classical CCSD Energy: -1.13727017465 Hartrees\n", + "Exact FCI Energy: -1.13727017463 Hartrees\n", + "Initial Energy of UCCSD with CCSD amplitudes: -1.13726981456 Hartrees\n" + ] + } + ], "source": [ "n_amplitudes = uccsd_singlet_paramsize(molecule.n_qubits, molecule.n_electrons)\n", "initial_amplitudes = [0, 0.05677]\n", @@ -745,11 +1293,178 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Allocate | Qubit[1]\n", + "X | Qubit[1]\n", + "Allocate | Qubit[2]\n", + "Allocate | Qubit[3]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[1]\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(12.5663706063) | Qubit[3]\n", + "Allocate | Qubit[0]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "X | Qubit[0]\n", + "Rx(10.9955742876) | Qubit[1]\n", + "H | Qubit[1]\n", + "Rx(1.57079632679) | Qubit[2]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(12.5381035842) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "Rx(10.9955742876) | Qubit[0]\n", + "H | Qubit[1]\n", + "H | Qubit[1]\n", + "Rx(10.9955742876) | Qubit[2]\n", + "Rx(1.57079632679) | Qubit[2]\n", + "Rx(10.9955742876) | Qubit[3]\n", + "H | Qubit[3]\n", + "H | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(12.5381035842) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "H | Qubit[1]\n", + "Rx(10.9955742876) | Qubit[2]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[3]\n", + "H | Qubit[1]\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(8.0625742705e-09) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "H | Qubit[0]\n", + "H | Qubit[1]\n", + "Rx(1.57079632679) | Qubit[1]\n", + "H | Qubit[2]\n", + "Rx(10.9955742876) | Qubit[3]\n", + "H | Qubit[3]\n", + "H | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(0.028267030141) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "H | Qubit[0]\n", + "Rx(10.9955742876) | Qubit[1]\n", + "H | Qubit[1]\n", + "H | Qubit[2]\n", + "H | Qubit[2]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[3]\n", + "H | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(12.5381035842) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "H | Qubit[0]\n", + "H | Qubit[1]\n", + "H | Qubit[1]\n", + "H | Qubit[2]\n", + "H | Qubit[2]\n", + "Rx(10.9955742876) | Qubit[3]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(0.028267030141) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "Rx(10.9955742876) | Qubit[0]\n", + "H | Qubit[1]\n", + "H | Qubit[2]\n", + "H | Qubit[2]\n", + "Rx(1.57079632679) | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "Rz(12.5663706063) | Qubit[2]\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "Rx(10.9955742876) | Qubit[0]\n", + "H | Qubit[2]\n", + "Rx(1.57079632679) | Qubit[2]\n", + "H | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "Rz(8.0625742705e-09) | Qubit[2]\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "H | Qubit[0]\n", + "Rx(1.57079632679) | Qubit[1]\n", + "Rx(10.9955742876) | Qubit[2]\n", + "Rx(1.57079632679) | Qubit[2]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[3]\n", + "H | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(12.5381035842) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "H | Qubit[0]\n", + "Rx(10.9955742876) | Qubit[1]\n", + "Rx(1.57079632679) | Qubit[1]\n", + "Rx(10.9955742876) | Qubit[2]\n", + "Rx(1.57079632679) | Qubit[2]\n", + "Rx(10.9955742876) | Qubit[3]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(0.028267030141) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "Rx(10.9955742876) | Qubit[0]\n", + "Rx(10.9955742876) | Qubit[1]\n", + "Rx(1.57079632679) | Qubit[1]\n", + "Rx(10.9955742876) | Qubit[2]\n", + "H | Qubit[2]\n", + "H | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[3]\n", + "Rx(1.57079632679) | Qubit[0]\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "Rz(0.028267030141) | Qubit[3]\n", + "CX | ( Qubit[2], Qubit[3] )\n", + "CX | ( Qubit[1], Qubit[2] )\n", + "CX | ( Qubit[0], Qubit[1] )\n", + "Rx(10.9955742876) | Qubit[0]\n", + "Rx(10.9955742876) | Qubit[1]\n", + "H | Qubit[2]\n", + "Rx(10.9955742876) | Qubit[3]\n" + ] + } + ], "source": [ "compiler_engine = uccsd_trotter_engine(CommandPrinter())\n", "wavefunction = compiler_engine.allocate_qureg(molecule.n_qubits)\n", @@ -767,21 +1482,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.0" + "pygments_lexer": "ipython2", + "version": "2.7.12" } }, "nbformat": 4,