{ "cells": [ { "cell_type": "markdown", "id": "a833cf14", "metadata": {}, "source": [ "# General Hamiltonians\n", "\n", "This notebook shows how to build and encode Fermionic Hamiltonians with `ferrmion`. You can easily define any Hamiltonian you like, and there are some functions to make it even easier to create common Hamiltonians. If you want to see that, skip to the next section.\n", "\n", "The encodings used in this notebook are known as the _naive_ versions of each encoding, because there is almost definitely a better version of it. `ferrmion` provides methods to get encodings optimised for your Hamiltonian. Check those out in the `Optimized Encodings` notebook.\n", "\n", "If you need to go a step further and define your own encoding to optimise, you can do that too! Start with the `Ternary Tree Mappings` notebook." ] }, { "cell_type": "markdown", "id": "948abb95", "metadata": {}, "source": [ "## Defining a Hamiltonian" ] }, { "cell_type": "markdown", "id": "eaed6929", "metadata": {}, "source": [ "Fermionic hamiltonians are built up of a number of terms, each of which has:\n", "- a \"signature\" of fermionic ladder opertors \"+\" and \"-\"\n", "- a matrix of coefficients\n", "\n", "You can build up arbitrary Hamiltonians by creating an empty one and adding terms.\n", "\n", "Let's create one with a \"+-\" or _onsite_ term for a system with 5 _fermionic modes_ (orbitals or sites!)." ] }, { "cell_type": "code", "execution_count": 1, "id": "c3348c5b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FermionHamiltonian(+-, 2 modes, constant 10.0)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import ferrmion as fr\n", "import numpy as np\n", "\n", "fham = fr.FermionHamiltonian()\n", "n_modes = 2\n", "onsite_coefficients = np.random.random((2, 2))\n", "fham.add_constant(10.0)\n", "fham.creation().annihilation().with_coefficients(onsite_coefficients)" ] }, { "cell_type": "markdown", "id": "50262fd4", "metadata": {}, "source": [ "we could add an interaction term \"+-+-\" in the same way, making sure to keep the number of modes constant." ] }, { "cell_type": "code", "execution_count": 2, "id": "3602be0d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FermionHamiltonian(+-, +-+-, 2 modes, constant 10.0)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interaction_coefficients = np.random.random((2, 2, 2, 2))\n", "\n", "fham.creation().annihilation().creation().annihilation().with_coefficients(\n", " interaction_coefficients\n", ")" ] }, { "cell_type": "markdown", "id": "71841f02", "metadata": {}, "source": [ "## Encoding a Hamiltonian.\n", "\n", "To encode a Hamiltonian, we can either build an encoding using the `TernaryTree` class, or use an inbuilt encoding. Building your gives you **lots more functionality** but if you just want to encode a Hamiltonian, you can still use the optimisation methods in `ferrmion` if you like.\n", "\n", "### Naive encodings\n", "- `jordan_wigner`\n", "- `bravyi_kitaev`\n", "- `parity`\n", "- `jkmn`\n", "\n", "### TOPP-HATT Optimised\n", "- `jordan_wigner_topphatt`\n", "- `bravyi_kitaev_topphatt`\n", "- `parity_topphatt`\n", "- `jkmn_topphatt`\n", "\n", "### Simulated-Annealing Optimised\n", "- `jordan_wigner_annealed`\n", "- `bravyi_kitaev_annealed`\n", "- `parity_annealed`\n", "- `jkmn_annealed`" ] }, { "cell_type": "code", "execution_count": 3, "id": "f05cca01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'IZ': (-1.0458146456716613+0j),\n", " 'XX': (0.7564336037154106+0j),\n", " 'XY': -0.0041692613704884945j,\n", " 'II': (11.582923203179865+0j),\n", " 'YY': (0.7564336037154106+0j),\n", " 'ZI': (-0.45963791408089505+0j),\n", " 'ZZ': (-0.07747064342730867+0j),\n", " 'YX': 0.0041692613704884945j}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fr.jordan_wigner(fham)" ] }, { "cell_type": "code", "execution_count": 4, "id": "ed02da22", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'XY': -0.0041692613704884945j,\n", " 'ZI': (-0.45963791408089505+0j),\n", " 'YX': 0.0041692613704884945j,\n", " 'IZ': (-1.0458146456716613+0j),\n", " 'XX': (0.7564336037154106+0j),\n", " 'II': (11.582923203179865+0j),\n", " 'YY': (0.7564336037154106+0j),\n", " 'ZZ': (-0.07747064342730867+0j)}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fr.jordan_wigner_topphatt(fham)" ] }, { "cell_type": "code", "execution_count": 5, "id": "7b3085b2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ZI': (-0.07747064342730867+0j),\n", " 'ZY': 0.0041692613704884945j,\n", " 'II': (11.582923203179865+0j),\n", " 'IX': (0.7564336037154106+0j),\n", " 'ZX': (-0.7564336037154106+0j),\n", " 'IY': -0.0041692613704884945j,\n", " 'ZZ': (-0.45963791408089505+0j),\n", " 'IZ': (-1.0458146456716613+0j)}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fr.bravyi_kitaev_annealed(fham)" ] }, { "cell_type": "markdown", "id": "676df5d6", "metadata": {}, "source": [ "## TernaryTree\n", "\n", "If you've built your own encoding, for instance using the TernaryTree class, you can also use this." ] }, { "cell_type": "code", "execution_count": 6, "id": "13f30cd1", "metadata": {}, "outputs": [ { "data": { "image/png": "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Wz0UgI4jUAIAUBOnh2io3/zmN5X/tfaLbjBv3rxWDwGgLQmUNMxJJ52UqVOnVt52Txqdrlg8VizaefDBB1s9FIC2I1DSMG94wxvy17/+1RFussWLF+e73/2u415nb3rTmyp/JB188MF56qmnHF+ANQiUNMy+++6b//7v/86sWbMqix1Wre52+Xvz7bLLLhsNM/fcc0/ljPDw4cPziU98ooa9sDFf+cpX8ta3vjVjxoxxkADWIFBSV1dddVXOOeecfO9738tPf/rTvOpVr8rDDz9cKTEvFCtoXf7efEWYvOmmm158/5lnnsm//du/VQLO2LFjK8f6m9/8ZubPn1+Hn2Z5FX8AFcewKN2/7777Kn8YFc+bL/597GMfy9y5cyv9lQBUWeVN3Tz//PN5+9vfXqkCmjNnTrbbbrv84he/qHzuoIMOyhNPPJEdd9wxr3jFK3LeeedVnqdM33zpS1/KqaeeWjmeI0aMyA9+8IOMHDkyH/jAB/K+970vw4YNc0jrECa//OUv55Of/GT22muvSpgcPHhwttpqq8ofRjvssENljhd/LF166aXZfvvtHXOg9Dwph7oZMmRIZsyYUfmP7dNPP135D/BHP/rRypnKj3/847n33nuzdOnSDBgwQJjcTMWl7IkTJ+ZrX/tapk+fXrmF4NBDD638Eybro5i/Rdl+cWvGO97xjsqTc4o/hopbCYqPFXN4m222qdwfvMUWW9RprwCdzRlKGqL4D29xabt4TvK//uu/5u6773ak66wINNdcc02+9a1v5cYbb8zrX//6HH/88Xnve99bOQtMbS655JLKIpw77rgj++yzz4tzetmyZZU/igBYTaCkoR555JHKau+rr746+++/v/snG6R4FvVll12W73znO5X7KI844ojKMac2Z5xxRi688ML86le/yqtf/WqHE2AjLMqhrlat5l719tChQzNw4MDKIgaLcRqnuJ/y9NNPz0MPPVQ5W7nttts2cG/lce6551Yue3/wgx+sXOpeZVVTwf/8z/+0cHQA7cMZSuqiWP168cUXVy6/FvegrRkeP//5z2fKlCmVxQzQiW677bYceOCBawXKU045pbLi/pZbbqncUwlQZgIlNSvOiv393/99dt999/zsZz/LoEGD1vr8qnvPoJsU/aoHHHBApa7puuuuq5yJBygrl7ypyZ/+9KdMmDChUp1y7bXX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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from ferrmion.visualise import draw_tt\n", "\n", "tree = fr.TernaryTree(n_modes=5)\n", "tree.add_node(\"zy\")\n", "tree.add_node(\"x\")\n", "tree.add_node(\"y\")\n", "tree.enumeration_scheme = tree.default_enumeration_scheme()\n", "draw_tt(tree, type=\"standard\", enumeration_scheme=tree.enumeration_scheme)" ] }, { "cell_type": "code", "execution_count": 7, "id": "e2f7e409", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'IZIII': (-1.0458146456716613+0j),\n", " 'ZZZII': (-0.45963791408089505+0j),\n", " 'ZYZII': 0.0041692613704884945j,\n", " 'ZIZII': (-0.07747064342730867+0j),\n", " 'IYIII': -0.0041692613704884945j,\n", " 'IXIII': (0.7564336037154106+0j),\n", " 'IIIII': (11.582923203179865+0j),\n", " 'ZXZII': (-0.7564336037154106+0j)}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree.encode(fham)" ] }, { "cell_type": "code", "execution_count": 8, "id": "2bf2c270", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ZIZII': (-0.07747064342730867+0j),\n", " 'IZIII': (-1.0458146456716613+0j),\n", " 'IYIII': -0.0041692613704884945j,\n", " 'IIIII': (11.582923203179865+0j),\n", " 'ZXZII': (-0.7564336037154106+0j),\n", " 'ZZZII': (-0.45963791408089505+0j),\n", " 'ZYZII': 0.0041692613704884945j,\n", " 'IXIII': (0.7564336037154106+0j)}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree.encode_annealed(fham)" ] }, { "cell_type": "code", "execution_count": 9, "id": "9b2a948b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'IYIII': 0.0041692613704884945j,\n", " 'IZIII': (-0.45963791408089505+0j),\n", " 'ZXZII': (-0.7564336037154106+0j),\n", " 'ZIZII': (-0.07747064342730867+0j),\n", " 'IIIII': (11.582923203179865+0j),\n", " 'ZYZII': -0.0041692613704884945j,\n", " 'IXIII': (0.7564336037154106+0j),\n", " 'ZZZII': (-1.0458146456716613+0j)}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree.encode_topphatt(fham)" ] }, { "cell_type": "markdown", "id": "46f885fa", "metadata": {}, "source": [ "## Saved Encodings\n", "\n", "It's possible to save an encoding, and re-use it later. \n", "\n", "Let's save and re-use the annealed encoding above." ] }, { "cell_type": "code", "execution_count": 10, "id": "ff362334", "metadata": {}, "outputs": [], "source": [ "import json\n", "from ferrmion import MajoranaStringEncoding\n", "\n", "annealed_qham = tree.encode_annealed(fham)\n", "\n", "with open(\"data/saved_encoding.json\", \"w+\") as f:\n", " json.dump(tree.to_json(), f)\n", "\n", "\n", "with open(\"data/saved_encoding.json\", \"r\") as f:\n", " data=json.load(f)\n", "\n", "encoding = MajoranaStringEncoding(ipowers=data[\"ipowers\"],symplectics=data[\"symplectics\"])\n", "qham_from_save = encoding.encode(fham)\n", "\n", "assert qham_from_save == annealed_qham" ] }, { "cell_type": "markdown", "id": "68e0bf8a", "metadata": {}, "source": [ "# Inbuilt Hamiltonians\n", "\n", "## Molecular Hamiltonian" ] }, { "cell_type": "markdown", "id": "b8c1653e", "metadata": {}, "source": [ "This section shows how to use a Fermion-Qubit encoding to encode a second quantised Molecular hamiltonian.\n", "\n", "$$H = \\sum_{i,j} h_{ij}a^{\\dagger}_i a_j + \\sum_{i,j,k,l} h_{ijkl}a^{\\dagger}_i a^{\\dagger}_j a_k a_l $$" ] }, { "cell_type": "markdown", "id": "a6bd7f21", "metadata": {}, "source": [ "Let's first get the coefficients for our second quantised hamiltonian.\n", "\n", "For the time being we can use randomly generated ones." ] }, { "cell_type": "code", "execution_count": 11, "id": "e75aee95", "metadata": {}, "outputs": [], "source": [ "import ferrmion as fr\n", "import numpy as np\n", "\n", "constant_energy = 0\n", "one_e_coeffs = np.random.random((3, 3))\n", "two_e_coeffs = np.random.random((3, 3, 3, 3))" ] }, { "cell_type": "code", "execution_count": 12, "id": "4f1e1be4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FermionHamiltonian(+-, ++--, 3 modes, constant 0)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fermion_hamiltonian = fr.molecular_hamiltonian(\n", " one_e_coeffs=one_e_coeffs,\n", " two_e_coeffs=two_e_coeffs,\n", " constant_energy=constant_energy,\n", ")\n", "fermion_hamiltonian" ] }, { "cell_type": "markdown", "id": "27f2e1a4", "metadata": {}, "source": [ "## Hubbard Hamiltonian " ] }, { "cell_type": "markdown", "id": "a33c9c04", "metadata": {}, "source": [ "This notebook shows how to use a Fermion-Qubit encoding to encode the second quantised Hubbard hamiltonian." ] }, { "cell_type": "markdown", "id": "7cd63aa8", "metadata": {}, "source": [ "$$H_{Hubbard} = -t \\sum_{\\langle i,j \\rangle,\\sigma}(a^{\\dagger}_{i,\\sigma} a_{j, \\sigma} + a^{\\dagger}_{j, \\sigma} a_{i,\\sigma}) + U \\sum_{i} \\hat{n}_i \\hat{n}_i$$" ] }, { "cell_type": "markdown", "id": "0691404b", "metadata": {}, "source": [ "The Hubbard Hamiltonian needs two scaler coefficients, the kinetic term $t$ and the onsite-term $U$. \n", "\n", "We can either define both $t$ and $U$, or use the default $t=1$ and scale $U$ around it." ] }, { "cell_type": "code", "execution_count": 13, "id": "df5c8ffb", "metadata": {}, "outputs": [], "source": [ "onsite_term = 2.0\n", "hopping_term = 0.5" ] }, { "cell_type": "markdown", "id": "f26abf20", "metadata": {}, "source": [ "We can now make a Hamiltonian for the size of system we want to look at, let's say 12 sites." ] }, { "cell_type": "code", "execution_count": 14, "id": "a783a96c", "metadata": {}, "outputs": [], "source": [ "n_sites = 6" ] }, { "cell_type": "code", "execution_count": 15, "id": "f1e58feb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FermionHamiltonian(+-, +-+-, 6 modes, constant 0.0)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ferrmion.hamiltonians import linear_adjacency_matrix\n", "\n", "hamiltonian = fr.hubbard_hamiltonian(\n", " adjacency_matrix=linear_adjacency_matrix(n_sites, periodic=False),\n", " onsite_term=onsite_term,\n", " hopping_term=hopping_term,\n", ")\n", "hamiltonian" ] }, { "cell_type": "markdown", "id": "ab57efc3", "metadata": {}, "source": [ "The function above will create matrices of coefficients for the \"+-\" and \"+-+-\" terms.\n", "\n", "We can plot these to get a better idea of what they look like." ] }, { "cell_type": "code", "execution_count": 16, "id": "9689029f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiUAAAHBCAYAAAC2UMviAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMdpJREFUeJzt3Q14VNWdx/H/JIEEFAKIvKREQAVREKIgKYKFCiVVliLbrS9Fi9TaasGFpbaW7grabjf4sr4ui+gqqBVBW4EtVRDlRUFAAVHUSkEBo4CoW5MAEiC5+/yP3MnMzUwyM5nJnJn5fp5nnsncuXPn3HPvnPubc8+d+BzHcQQAACDJspJdAAAAAEUoAQAAViCUAAAAKxBKAACAFQglAADACoQSAABgBUIJAACwAqEEAABYgVACAACsQChBQt12223i8/nk888/b3BenW/SpElJ3SLDhg0zt1Sm9aj17po3b56Ztnv37qSU59prr5Vu3bpJJtqxY4eMHDlS8vPzzTZYvHixmf7GG2/IhRdeKCeddJKZvnXrVv9nJRP3WcBFKIH/oLVp06aQtaENXp8+faipAHqQ/Yd/+IeQdbJ69WpTn3/84x+trbP//u//Nts9E1RUVMjtt98u/fr1k5NPPllatGhh9udbbrlF9u7dm9D3Hj9+vGzbtk1+//vfy5NPPikDBgyQY8eOyQ9+8AP5v//7P7n33nvN9K5du4rNXnvtNROavvzyy2QXBWkuJ9kFABBfX331leTk5DQYStq3b296MRLtkUcekZqaGkmGDz/8UEaMGCEfffSRCQI//elPpXnz5vL222/Lo48+KosWLZK//e1vCdsO69evl3/9138N6gF8//33Zc+ePaZefvKTn/in/9u//Zv8+te/jvp9XnzxRWmKUKLBTveXNm3aJPz9kLkIJcgohw4dMl3m6SwvL09s0qxZs6S87/Hjx+Uf//Ef5dNPPzW9V0OGDAl6Xnsv7rjjjoS9/2effWbuvQfxAwcOhJyuQbKhMBmKhiwgXXD6BlHTsQl6eiJU9793PINLx5Rcfvnl0rp1aznllFNk8uTJcuTIkZDLf+qpp+Sss84yB9f+/fvLK6+8EvS8fsv8+c9/bubRrnhdnn4L9o6ZcE9LrVmzxszfoUMH6dKli//5hx9+WM444wyzjIEDB8qrr76asL0h2jKvXbtW/vmf/1lOPfVUc/D62c9+JkePHjXd5z/60Y+kbdu25varX/1KvP/oO9w2CDz19O6775p60Xn1FjgmQXsXtGzt2rWTli1byje/+U35y1/+EvIU1TPPPGMO7lqvur2GDx8uO3fubHBMyd13323GVGg9aH3odg51ussdZ6RjMfSUS25urvTu3VuWLVvWYJ3/6U9/krfeesv0VHgDidJ9Ucse6NlnnzVl0TJpT9LVV18tn3zySZ3Xam/HP/3TP5k60vXW0zL/+7//639e6989JfPLX/7SrIfWgdbF0KFDzXSt48C6Dzem5A9/+IPZP3Vb6Db/1re+FdQ7EmpMSVVVlcyYMUPOPPNMU2eFhYVmX9Hp0davlkvXQXXv3t2/z7j77ooVK0z96n6qp8d0H//Nb37TwNYBQqOnBH7l5eUhB6TqOfDG0kCijXJpaals2LBBHnjgAfn73/8uTzzxRNB8eqBcuHChOSBrA6mnGb773e/K66+/7h/XooMEtTv5yiuvNAdDbRxnz55tGub33nvPNN6BNAzowX369Ommp0Rp170e6PXAOGXKFHMg/t73vmcOMtqAR0LrJVR9aT16RVvmm266STp16mS6zLW+NEBpo6/LOO200+Q//uM/5Pnnn5e77rrL1IsGlUjdd999Zvl6ANEDturYsaO5114FrZPDhw+bbaCh4fHHHzd1o6Fh7NixQcuaOXOmZGVlyc0332zW+84775Rx48bJxo0b6y3D/fffb5ap82rYWrBggTlIL126VEaNGhU0rwa05557zmzHVq1amX3n+9//vjklo+ULxw0J11xzTUT1ooFwwoQJcsEFF5j9VOtCy7lu3Tp58803/T0bGugGDx4s3/jGN8zpFu1503B22WWXmSCkdaQ9NDr/v/zLv8hVV10ll156qalvrWd9nW4/rV99L7fuQ9Htr6FAt8lvf/tb0yuidbty5UozgDYUPVWmdav1pqerzj77bDOuRcev6Kkqd7BtpPWr66Kve/rpp80yNKwp/UxpXejYqr59+5ry6WdWQ6nWGRATBxlv7ty5+lW73lvv3r399bRr1y4zTV/npdNnzJjhf6x/67Tvfe97QfP9/Oc/N9PfeuutoNfqbdOmTf5pe/bscfLy8pyxY8f6px0+fLjO+65fv9689oknnqizXkOGDHGOHz/un3706FGnQ4cOTlFRkVNVVeWf/vDDD5v5hw4d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VNreNTU15lTr4MGDpU+fPmHna6rjd9L+S3CmmjlzpixYsMB8Sw4c9KnfpF06gKhv375yxhlnmPmGDx8uqUgH/OnNpYHk7LPPljlz5sjvfvc7yQT6LUq358CBA4Omp+P2hsj8+fPl9ttvN0E8cGyFBk6Xbms9aOk362eeecaco09F+qVDb4Gf7w8++EDuvfdeefLJJyUTPP7449KmTRsztiJQKm3viRMnmi9Otox5ibmnpH379mbw3qeffho0XR936tQp5Gt0en3zu/fRLLOpxbLegd+gNJS8+OKLZketj3b56Xvt3LlTUn29Xc2aNZPzzjvPv07pvr110JgG0EgaIdu2dyzCfb51sLOOxI/HPmQz3db6jVkPPN5ubi89kPXs2TOlt3coGr7ddUr37a1DULQn+JprrpHmzZun5PaeNGmSLF261FyE0aVLl3rnbarjd8yhRDdC//79TfdzYDeQPg78dhxIpwfOr3Tkrzt/9+7dTeED59GuXx3FG26ZTS2W9XZHJWvvgHbnDRgwoMH30VMcOsZAu0hTeb0DaVfutm3b/OuUztvbvXyuqqpKrr766pTb3rFo6PMdj33IVnrl1IQJE8x94KXf4ejpHe1VSOXtHYpedeWuUzpvb6WnXDVkRPKlw7bt7TiOCSSLFi2SlStXmra4IU12/HYaYcGCBWZk7bx585z33nvP+elPf+q0adPG2b9/v3n+mmuucX7961/751+3bp2Tk5Pj3H333c5f//pXM0K5WbNmzrZt2/zzzJw50yxjyZIlzttvv22uUOjevbvz1VdfObaIdr11nZo3b+788Y9/dPbt2+e/VVZWmuf1/uabb3bWr1/v7Nq1y3nppZec888/3+nRo4dz5MgRJ1XXW68+WL58ufPBBx84mzdvdq688konLy/Peffdd9N6e7uGDBlirj7xSpXtreV88803zU2binvuucf8vWfPHvO8rrOuu+vDDz90WrZs6fzyl780n+9Zs2Y52dnZzrJlyyKuy1Rc76eeesq0a7q+gZ9vvfLA9Ytf/MJZvXq12d7aDo4YMcJp3769ueohVddbrypbvHixs2PHDtOGT5482cnKyjL7czpvb9fVV19trj4JxfbtfeONN5orI7WMgfvs4cOH/fMk6/jdqFCiHnzwQee0004zB129/GvDhg3+54YOHWoufQz0zDPPOD179jTz6+WDf/nLX4Ke18uKbr31Vqdjx45mZx4+fLizfft2xzbRrHfXrl3Nzu696UZVuiOMHDnSOfXUU81G1vmvv/56qz64saz3lClT/PPq9rz00kudLVu2pP32Vu+//77Zxi+++GKdZaXK9nYv+fTe3HXVe11372uKiopMPZ1++unmsvBo6jIV11v/rm9+peG0c+fOZp2/8Y1vmMc7d+50Unm977jjDueMM84wXzTatWvnDBs2zFm5cmXab2+lgbNFixbOww8/HHKZtm9vCbG+egv8vCbr+O07UUAAAICk4n/fAAAAKxBKAACAFQglAADACoQSAABgBUIJAACwAqEEAABYgVACAACsQCgBAABWIJQAAAArEEoAAIAVCCUAAMAKhBIAACA2+H+T+CvqKoqS6wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from matplotlib import colors\n", "import numpy as np\n", "\n", "fig, axs = plt.subplots(1, 2)\n", "fig.suptitle(\"Hubbard Hamiltonian Coefficients\")\n", "# create a single norm to be shared across all images\n", "norm = colors.Normalize(vmin=np.min(0), vmax=np.max([onsite_term, hopping_term]))\n", "\n", "axs[0].set_title(\"$t$\")\n", "axs[1].set_title(\"$U$\")\n", "images = []\n", "images.append(axs[0].imshow(hamiltonian._terms[\"+-\"], norm=norm))\n", "# We use einsum to see the values for number operators\n", "images.append(\n", " axs[1].imshow(np.einsum(\"iijj->ij\", hamiltonian._terms[\"+-+-\"]), norm=norm)\n", ")\n", "fig.colorbar(images[0], ax=axs, orientation=\"horizontal\", fraction=0.1)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "edff5669", "metadata": {}, "source": [ "Finally, we can encode the Hamiltonian as before." ] }, { "cell_type": "code", "execution_count": 17, "id": "bf8fa5e5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ZXXZII': (-0.25+0j),\n", " 'IYYIII': (-0.25+0j),\n", " 'IZXXZI': (-0.25+0j),\n", " 'IIZXXZ': (-0.25+0j),\n", " 'IIIIII': (6+0j),\n", " 'IIIIYY': (-0.25+0j),\n", " 'IIYYII': (-0.25+0j),\n", " 'IIIIZZ': (-1+0j),\n", " 'IIIYYI': (-0.25+0j),\n", " 'IIIZZI': (-1+0j),\n", " 'IZZIII': (-1+0j),\n", " 'IIZZII': (-1+0j),\n", " 'ZZIIII': (-1+0j),\n", " 'IIIZXX': (-0.25+0j),\n", " 'IIIIIZ': (-1+0j)}" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fr.parity(hamiltonian)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.1" } }, "nbformat": 4, "nbformat_minor": 5 }