{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Entanglement of Formation\n", "\n", "$$\n", " \\newcommand{\\ul}[1]{\\underline{#1}}\n", " \\newcommand{\\rvalp}[0]{{\\ul{\\alpha}}}\n", "\\newcommand{\\alp}[0]{{\\alpha}}\n", " \\newcommand{\\rvx}[0]{{\\ul{x}}}\n", "\\newcommand{\\rvy}[0]{{\\ul{y}}}\n", "$$\n", "\n", "The purpose of this notebook is to show how to use entanglish to calculate the formation entanglement of a mixed state (either pure or not pure). \n", "\n", "A closed exact formula is known, thanks to Wootters, for the\n", "entang of formation of an arbitrary mixture of 2 qubits. Class\n", "TwoQubitState of entanglish contains an implementation of said formula.\n", "In this notebook, we calculate formation entanglement for some\n", "2 qubit states using our Arimoto-Blahut inspired algorithm and\n", "compare the results to Wootters formula.\n", "\n", "We've been calculating squashed entanglement from the formula\n", "\n", "$$\n", "E_{\\rvx, \\rvy}(\\rho_{\\rvx, \\rvy})=\n", "\\frac{1}{2}\n", "{\\rm min}\\sum_\\alp w^\\alp [\n", "S(\\rho^\\alp_{\\rvx})\n", "+S(\\rho^\\alp_{\\rvy})\n", "-S(\\rho^\\alp_{\\rvx, \\rvy})]\n", "$$\n", "\n", "where the minimum is over all\n", "families of density matrices\n", "$\\{\\rho^\\alp_{\\rvx, \\rvy}|\\forall \\alp\\}$\n", "such that $\\sum_\\alp \\rho^\\alp_{\\rvx, \\rvy}=\n", "\\rho_{\\rvx, \\rvy}$. If we just add\n", "the further constraint that\n", "the states $\\rho^\\alp_{\\rvx, \\rvy}$ are pure states, then\n", "$S(\\rho^\\alp_{\\rvx, \\rvy})=0$,\n", "$S(\\rho^\\alp_{\\rvx})=S(\\rho^\\alp_{\\rvy})$,\n", "and we get precisely the definition\n", "of Entanglement of Formation for a pure or mixed state.\n", "\n", "\n", "See Entanglish-Original-Ref for a detailed explanation of the algos used in this class.\n", "\n", "**Entanglish-Original-Ref**\n", "* \"A New Algorithm for Calculating\n", "Squashed Entanglement and a Python Implementation Thereof\", by R.R.Tucci" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First change your working directory to the entanglish directory in your computer, and add its path to the path environment variable." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "print(os.getcwd())\n", "os.chdir('../../')\n", "print(os.getcwd())\n", "sys.path.insert(0,os.getcwd())" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from entanglish.SymNupState import *\n", "from entanglish.TwoQubitState import *\n", "from entanglish.FormationEnt import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Random 3 qubit states" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "recursion_init= eigen+\n", "num_ab_steps= 100\n", "***************new dm\n", "evas_of_dm\n", " [0.07 0.03 0.25 0.15 0.3 0.1 0.06 0.04]\n", "\n", "initial norm of Dxy - sum_alp Kxy_alp, should be 0\n", " 4.880055036277153e-16\n", "--ab step= 0 , entang= 0.446881 , err= 3.657084\n", "--ab step= 1 , entang= 0.183057 , err= 1.999145\n", "--ab step= 2 , entang= 0.120093 , err= 1.412567\n", "--ab step= 3 , entang= 0.087039 , err= 1.086403\n", "--ab step= 4 , entang= 0.062918 , err= 0.853852\n", "--ab step= 5 , entang= 0.047191 , err= 0.664342\n", "--ab step= 6 , entang= 0.037213 , err= 0.529728\n", "--ab step= 7 , entang= 0.030705 , err= 0.434081\n", "--ab step= 8 , entang= 0.026383 , err= 0.367761\n", "--ab step= 9 , entang= 0.023392 , err= 0.327570\n", "--ab step= 10 , entang= 0.021205 , err= 0.304239\n", "--ab step= 11 , entang= 0.019512 , err= 0.287927\n", "--ab step= 12 , entang= 0.018143 , err= 0.275193\n", "--ab step= 13 , entang= 0.017004 , err= 0.264460\n", "--ab step= 14 , entang= 0.016029 , err= 0.255123\n", "--ab step= 15 , entang= 0.015178 , err= 0.246837\n", "--ab step= 16 , entang= 0.014417 , err= 0.239328\n", "--ab step= 17 , entang= 0.013724 , err= 0.232378\n", "--ab step= 18 , entang= 0.013079 , err= 0.225817\n", "--ab step= 19 , entang= 0.012471 , err= 0.219520\n", "--ab step= 20 , entang= 0.011890 , err= 0.213397\n", "--ab step= 21 , entang= 0.011331 , err= 0.207395\n", "--ab step= 22 , entang= 0.010791 , err= 0.201492\n", "--ab step= 23 , entang= 0.010271 , err= 0.195695\n", "--ab step= 24 , entang= 0.009774 , err= 0.190032\n", "--ab step= 25 , entang= 0.009300 , err= 0.184543\n", "--ab step= 26 , entang= 0.008855 , err= 0.179271\n", "--ab step= 27 , entang= 0.008438 , err= 0.174256\n", "--ab step= 28 , entang= 0.008052 , err= 0.169526\n", "--ab step= 29 , entang= 0.007698 , err= 0.165098\n", "--ab step= 30 , entang= 0.007373 , err= 0.160980\n", "--ab step= 31 , entang= 0.007077 , err= 0.157166\n", "--ab step= 32 , entang= 0.006807 , err= 0.153646\n", "--ab step= 33 , entang= 0.006563 , err= 0.150405\n", "--ab step= 34 , entang= 0.006341 , err= 0.147426\n", "--ab step= 35 , entang= 0.006140 , err= 0.144688\n", "--ab step= 36 , entang= 0.005957 , err= 0.142173\n", "--ab step= 37 , entang= 0.005790 , err= 0.139863\n", "--ab step= 38 , entang= 0.005639 , err= 0.137739\n", "--ab step= 39 , entang= 0.005501 , err= 0.135786\n", "--ab step= 40 , entang= 0.005376 , err= 0.133989\n", "--ab step= 41 , entang= 0.005261 , err= 0.132334\n", "--ab step= 42 , entang= 0.005156 , err= 0.130809\n", "--ab step= 43 , entang= 0.005059 , err= 0.129402\n", "--ab step= 44 , entang= 0.004971 , err= 0.128104\n", "--ab step= 45 , entang= 0.004890 , err= 0.126904\n", "--ab step= 46 , entang= 0.004816 , err= 0.125795\n", "--ab step= 47 , entang= 0.004747 , err= 0.124769\n", "--ab step= 48 , entang= 0.004684 , err= 0.123819\n", "--ab step= 49 , entang= 0.004626 , err= 0.122940\n", "--ab step= 50 , entang= 0.004572 , err= 0.122124\n", "--ab step= 51 , entang= 0.004522 , err= 0.121368\n", "--ab step= 52 , entang= 0.004476 , err= 0.120667\n", "--ab step= 53 , entang= 0.004434 , err= 0.120015\n", "--ab step= 54 , entang= 0.004395 , err= 0.119410\n", "--ab step= 55 , entang= 0.004358 , err= 0.118848\n", "--ab step= 56 , entang= 0.004324 , err= 0.118325\n", "--ab step= 57 , entang= 0.004293 , err= 0.117839\n", "--ab step= 58 , entang= 0.004264 , err= 0.117386\n", "--ab step= 59 , entang= 0.004237 , err= 0.116965\n", "--ab step= 60 , entang= 0.004212 , err= 0.116572\n", "--ab step= 61 , entang= 0.004188 , err= 0.116206\n", "--ab step= 62 , entang= 0.004167 , err= 0.115866\n", "--ab step= 63 , entang= 0.004146 , err= 0.115548\n", "--ab step= 64 , entang= 0.004127 , err= 0.115252\n", "--ab step= 65 , entang= 0.004110 , err= 0.114975\n", "--ab step= 66 , entang= 0.004093 , err= 0.114717\n", "--ab step= 67 , entang= 0.004078 , err= 0.114476\n", "--ab step= 68 , entang= 0.004064 , err= 0.114252\n", "--ab step= 69 , entang= 0.004051 , err= 0.114042\n", "--ab step= 70 , entang= 0.004038 , err= 0.113845\n", "--ab step= 71 , entang= 0.004027 , err= 0.113662\n", "--ab step= 72 , entang= 0.004016 , err= 0.113491\n", "--ab step= 73 , entang= 0.004006 , err= 0.113331\n", "--ab step= 74 , entang= 0.003996 , err= 0.113181\n", "--ab step= 75 , entang= 0.003987 , err= 0.113041\n", "--ab step= 76 , entang= 0.003979 , err= 0.112910\n", "--ab step= 77 , entang= 0.003971 , err= 0.112787\n", "--ab step= 78 , entang= 0.003964 , err= 0.112672\n", "--ab step= 79 , entang= 0.003957 , err= 0.112565\n", "--ab step= 80 , entang= 0.003951 , err= 0.112464\n", "--ab step= 81 , entang= 0.003945 , err= 0.112370\n", "--ab step= 82 , entang= 0.003939 , err= 0.112282\n", "--ab step= 83 , entang= 0.003934 , err= 0.112200\n", "--ab step= 84 , entang= 0.003929 , err= 0.112122\n", "--ab step= 85 , entang= 0.003925 , err= 0.112050\n", "--ab step= 86 , entang= 0.003920 , err= 0.111982\n", "--ab step= 87 , entang= 0.003916 , err= 0.111918\n", "--ab step= 88 , entang= 0.003913 , err= 0.111859\n", "--ab step= 89 , entang= 0.003909 , err= 0.111803\n", "--ab step= 90 , entang= 0.003906 , err= 0.111751\n", "--ab step= 91 , entang= 0.003903 , err= 0.111702\n", "--ab step= 92 , entang= 0.003900 , err= 0.111656\n", "--ab step= 93 , entang= 0.003897 , err= 0.111613\n", "--ab step= 94 , entang= 0.003894 , err= 0.111572\n", "--ab step= 95 , entang= 0.003892 , err= 0.111534\n", "--ab step= 96 , entang= 0.003890 , err= 0.111499\n", "--ab step= 97 , entang= 0.003888 , err= 0.111465\n", "--ab step= 98 , entang= 0.003886 , err= 0.111434\n", "--ab step= 99 , entang= 0.003884 , err= 0.111405\n", "ent_02_1= 0.0038837130076252997\n", "***************new dm\n", "evas_of_dm\n", " [0.05 0.05 0.2 0.2 0.3 0.1 0.06 0.04]\n", "\n", "initial norm of Dxy - sum_alp Kxy_alp, should be 0\n", " 3.5153434668415376e-16\n", "--ab step= 0 , entang= 0.441242 , err= 3.729046\n", "--ab step= 1 , entang= 0.248103 , err= 2.508817\n", "--ab step= 2 , entang= 0.164856 , err= 1.853881\n", "--ab step= 3 , entang= 0.120789 , err= 1.431601\n", "--ab step= 4 , entang= 0.095947 , err= 1.132679\n", "--ab step= 5 , entang= 0.074881 , err= 0.849668\n", "--ab step= 6 , entang= 0.057520 , err= 0.647306\n", "--ab step= 7 , entang= 0.044667 , err= 0.507155\n", "--ab step= 8 , entang= 0.035273 , err= 0.426439\n", "--ab step= 9 , entang= 0.028189 , err= 0.371646\n", "--ab step= 10 , entang= 0.022704 , err= 0.326121\n", "--ab step= 11 , entang= 0.018443 , err= 0.287759\n", "--ab step= 12 , entang= 0.015137 , err= 0.255546\n", "--ab step= 13 , entang= 0.012574 , err= 0.228632\n", "--ab step= 14 , entang= 0.010582 , err= 0.206206\n", "--ab step= 15 , entang= 0.009026 , err= 0.187517\n", "--ab step= 16 , entang= 0.007798 , err= 0.171897\n", "--ab step= 17 , entang= 0.006821 , err= 0.158778\n", "--ab step= 18 , entang= 0.006033 , err= 0.147686\n", "--ab step= 19 , entang= 0.005391 , err= 0.138238\n", "--ab step= 20 , entang= 0.004861 , err= 0.130125\n", "--ab step= 21 , entang= 0.004419 , err= 0.123100\n", "--ab step= 22 , entang= 0.004046 , err= 0.116967\n", "--ab step= 23 , entang= 0.003729 , err= 0.111572\n", "--ab step= 24 , entang= 0.003456 , err= 0.106792\n", "--ab step= 25 , entang= 0.003219 , err= 0.102529\n", "--ab step= 26 , entang= 0.003013 , err= 0.098704\n", "--ab step= 27 , entang= 0.002831 , err= 0.095253\n", "--ab step= 28 , entang= 0.002670 , err= 0.092126\n", "--ab step= 29 , entang= 0.002527 , err= 0.089278\n", "--ab step= 30 , entang= 0.002399 , err= 0.086676\n", "--ab step= 31 , entang= 0.002283 , err= 0.084290\n", "--ab step= 32 , entang= 0.002180 , err= 0.082095\n", "--ab step= 33 , entang= 0.002085 , err= 0.080069\n", "--ab step= 34 , entang= 0.002000 , err= 0.078195\n", "--ab step= 35 , entang= 0.001922 , err= 0.076457\n", "--ab step= 36 , entang= 0.001851 , err= 0.074842\n", "--ab step= 37 , entang= 0.001785 , err= 0.073338\n", "--ab step= 38 , entang= 0.001725 , err= 0.071935\n", "--ab step= 39 , entang= 0.001670 , err= 0.070623\n", "--ab step= 40 , entang= 0.001618 , err= 0.069395\n", "--ab step= 41 , entang= 0.001571 , err= 0.068244\n", "--ab step= 42 , entang= 0.001527 , err= 0.067162\n", "--ab step= 43 , entang= 0.001486 , err= 0.066146\n", "--ab step= 44 , entang= 0.001448 , err= 0.065189\n", "--ab step= 45 , entang= 0.001412 , err= 0.064286\n", "--ab step= 46 , entang= 0.001379 , err= 0.063435\n", "--ab step= 47 , entang= 0.001348 , err= 0.062631\n", "--ab step= 48 , entang= 0.001319 , err= 0.061870\n", "--ab step= 49 , entang= 0.001292 , err= 0.061150\n", "--ab step= 50 , entang= 0.001266 , err= 0.060468\n", "--ab step= 51 , entang= 0.001242 , err= 0.059821\n", "--ab step= 52 , entang= 0.001220 , err= 0.059207\n", "--ab step= 53 , entang= 0.001198 , err= 0.058623\n", "--ab step= 54 , entang= 0.001178 , err= 0.058069\n", "--ab step= 55 , entang= 0.001159 , err= 0.057541\n", "--ab step= 56 , entang= 0.001141 , err= 0.057039\n", "--ab step= 57 , entang= 0.001124 , err= 0.056561\n", "--ab step= 58 , entang= 0.001108 , err= 0.056105\n", "--ab step= 59 , entang= 0.001092 , err= 0.055670\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "--ab step= 60 , entang= 0.001078 , err= 0.055255\n", "--ab step= 61 , entang= 0.001064 , err= 0.054859\n", "--ab step= 62 , entang= 0.001051 , err= 0.054480\n", "--ab step= 63 , entang= 0.001038 , err= 0.054118\n", "--ab step= 64 , entang= 0.001026 , err= 0.053772\n", "--ab step= 65 , entang= 0.001015 , err= 0.053440\n", "--ab step= 66 , entang= 0.001004 , err= 0.053123\n", "--ab step= 67 , entang= 0.000994 , err= 0.052819\n", "--ab step= 68 , entang= 0.000984 , err= 0.052528\n", "--ab step= 69 , entang= 0.000975 , err= 0.052249\n", "--ab step= 70 , entang= 0.000966 , err= 0.051982\n", "--ab step= 71 , entang= 0.000958 , err= 0.051725\n", "--ab step= 72 , entang= 0.000949 , err= 0.051479\n", "--ab step= 73 , entang= 0.000942 , err= 0.051242\n", "--ab step= 74 , entang= 0.000934 , err= 0.051015\n", "--ab step= 75 , entang= 0.000927 , err= 0.050797\n", "--ab step= 76 , entang= 0.000920 , err= 0.050587\n", "--ab step= 77 , entang= 0.000914 , err= 0.050385\n", "--ab step= 78 , entang= 0.000907 , err= 0.050191\n", "--ab step= 79 , entang= 0.000901 , err= 0.050005\n", "--ab step= 80 , entang= 0.000895 , err= 0.049825\n", "--ab step= 81 , entang= 0.000890 , err= 0.049653\n", "--ab step= 82 , entang= 0.000885 , err= 0.049486\n", "--ab step= 83 , entang= 0.000879 , err= 0.049326\n", "--ab step= 84 , entang= 0.000874 , err= 0.049172\n", "--ab step= 85 , entang= 0.000870 , err= 0.049024\n", "--ab step= 86 , entang= 0.000865 , err= 0.048880\n", "--ab step= 87 , entang= 0.000861 , err= 0.048742\n", "--ab step= 88 , entang= 0.000857 , err= 0.048609\n", "--ab step= 89 , entang= 0.000853 , err= 0.048481\n", "--ab step= 90 , entang= 0.000849 , err= 0.048357\n", "--ab step= 91 , entang= 0.000845 , err= 0.048238\n", "--ab step= 92 , entang= 0.000841 , err= 0.048122\n", "--ab step= 93 , entang= 0.000838 , err= 0.048011\n", "--ab step= 94 , entang= 0.000834 , err= 0.047904\n", "--ab step= 95 , entang= 0.000831 , err= 0.047800\n", "--ab step= 96 , entang= 0.000828 , err= 0.047700\n", "--ab step= 97 , entang= 0.000825 , err= 0.047603\n", "--ab step= 98 , entang= 0.000822 , err= 0.047510\n", "--ab step= 99 , entang= 0.000819 , err= 0.047420\n", "ent_02_1= 0.0008193739730244202\n" ] } ], "source": [ "np.random.seed(123)\n", "dm = DenMat(8, (2, 2, 2))\n", "evas_of_dm_list = [\n", " np.array([.07, .03, .25, .15, .3, .1, .06, .04])\n", " , np.array([.05, .05, .2, .2, .3, .1, .06, .04])\n", " ]\n", "\n", "recursion_init = \"eigen+\"\n", "num_ab_steps = 100\n", "print(\"recursion_init=\", recursion_init)\n", "print('num_ab_steps=', num_ab_steps)\n", "for evas_of_dm in evas_of_dm_list:\n", " evas_of_dm /= np.sum(evas_of_dm)\n", " print('***************new dm')\n", " print('evas_of_dm\\n', evas_of_dm)\n", " dm.set_arr_to_rand_den_mat(evas_of_dm)\n", " ecase = FormationEnt(dm, num_ab_steps,\n", " recursion_init=recursion_init, verbose=True)\n", " print('ent_02_1=', ecase.get_entang({0, 2}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Symmetrized N-up states" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "recursion_init= eigen+\n", "num_ab_steps= 15\n", "entang_023: algo value, known value\n", " 0.5623351446188087 0.5623351446188083\n", "entang_02: algo value, known value\n", " 0.693147180559946 0.6931471805599453\n", "entang_1: algo value, known value\n", " 0.5623351446188093 0.5623351446188083\n" ] } ], "source": [ "num_qbits = 4\n", "num_up = 1\n", "dm1 = DenMat(1 << num_qbits, tuple([2]*num_qbits))\n", "st = SymNupState(num_up, num_qbits)\n", "st_vec = st.get_st_vec()\n", "dm1.set_arr_from_st_vec(st_vec)\n", "\n", "recursion_init = \"eigen+\"\n", "num_ab_steps = 15\n", "print(\"recursion_init=\", recursion_init)\n", "print('num_ab_steps=', num_ab_steps)\n", "ecase = FormationEnt(dm1, num_ab_steps,\n", " recursion_init=recursion_init, verbose=False)\n", "print('entang_023: algo value, known value\\n',\n", " ecase.get_entang({0, 2, 3}),\n", " st.get_known_entang(3))\n", "print('entang_02: algo value, known value\\n',\n", " ecase.get_entang({0, 2}),\n", " st.get_known_entang(2))\n", "print('entang_1: algo value, known value\\n',\n", " ecase.get_entang({1}),\n", " st.get_known_entang(1))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Isotropic Werner state of 2 qubits (entanglement calculated numerically and with Wootters formula)ΒΆ" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "recursion_init= eigen+\n", "num_ab_steps= 50\n", "-------new dm\n", "\n", "initial norm of Dxy - sum_alp Kxy_alp, should be 0\n", " 7.97218214573518e-17\n", "--ab step= 0 , entang= 0.555735 , err= 2.506835\n", "--ab step= 1 , entang= 0.393590 , err= 2.362168\n", "--ab step= 2 , entang= 0.378178 , err= 2.312837\n", "--ab step= 3 , entang= 0.357259 , err= 2.186007\n", "--ab step= 4 , entang= 0.326879 , err= 2.001794\n", "--ab step= 5 , entang= 0.301413 , err= 1.845208\n", "--ab step= 6 , entang= 0.281487 , err= 1.716564\n", "--ab step= 7 , entang= 0.251140 , err= 1.478213\n", "--ab step= 8 , entang= 0.212558 , err= 1.137196\n", "--ab step= 9 , entang= 0.187458 , err= 0.834544\n", "--ab step= 10 , entang= 0.177733 , err= 0.642485\n", "--ab step= 11 , entang= 0.175004 , err= 0.560991\n", "--ab step= 12 , entang= 0.174137 , err= 0.523007\n", "--ab step= 13 , entang= 0.173801 , err= 0.501893\n", "--ab step= 14 , entang= 0.173648 , err= 0.488981\n", "--ab step= 15 , entang= 0.173567 , err= 0.480723\n", "--ab step= 16 , entang= 0.173521 , err= 0.475356\n", "--ab step= 17 , entang= 0.173492 , err= 0.471860\n", "--ab step= 18 , entang= 0.173474 , err= 0.469593\n", "--ab step= 19 , entang= 0.173462 , err= 0.468130\n", "--ab step= 20 , entang= 0.173455 , err= 0.467190\n", "--ab step= 21 , entang= 0.173451 , err= 0.466589\n", "--ab step= 22 , entang= 0.173448 , err= 0.466205\n", "--ab step= 23 , entang= 0.173446 , err= 0.465962\n", "--ab step= 24 , entang= 0.173445 , err= 0.465808\n", "--ab step= 25 , entang= 0.173444 , err= 0.465710\n", "--ab step= 26 , entang= 0.173443 , err= 0.465648\n", "--ab step= 27 , entang= 0.173443 , err= 0.465609\n", "--ab step= 28 , entang= 0.173443 , err= 0.465585\n", "--ab step= 29 , entang= 0.173443 , err= 0.465569\n", "--ab step= 30 , entang= 0.173443 , err= 0.465559\n", "--ab step= 31 , entang= 0.173443 , err= 0.465553\n", "--ab step= 32 , entang= 0.173443 , err= 0.465549\n", "--ab step= 33 , entang= 0.173443 , err= 0.465547\n", "--ab step= 34 , entang= 0.173443 , err= 0.465545\n", "--ab step= 35 , entang= 0.173443 , err= 0.465544\n", "--ab step= 36 , entang= 0.173443 , err= 0.465544\n", "--ab step= 37 , entang= 0.173443 , err= 0.465543\n", "--ab step= 38 , entang= 0.173443 , err= 0.465543\n", "--ab step= 39 , entang= 0.173443 , err= 0.465543\n", "--ab step= 40 , entang= 0.173443 , err= 0.465543\n", "--ab step= 41 , entang= 0.173443 , err= 0.465543\n", "--ab step= 42 , entang= 0.173443 , err= 0.465543\n", "--ab step= 43 , entang= 0.173443 , err= 0.465543\n", "--ab step= 44 , entang= 0.173443 , err= 0.465543\n", "--ab step= 45 , entang= 0.173443 , err= 0.465543\n", "--ab step= 46 , entang= 0.173443 , err= 0.465543\n", "--ab step= 47 , entang= 0.173443 , err= 0.465543\n", "--ab step= 48 , entang= 0.173443 , err= 0.465543\n", "--ab step= 49 , entang= 0.173443 , err= 0.465543\n", "entang_0: algo value, known value\n", " 0.17344269200724546 0.17344269198907492\n" ] } ], "source": [ "dm1 = TwoQubitState.get_bell_basis_diag_dm(.7)\n", "\n", "recursion_init = \"eigen+\"\n", "num_ab_steps = 50\n", "print(\"recursion_init=\", recursion_init)\n", "print('num_ab_steps=', num_ab_steps)\n", "for dm in [dm1]:\n", " print(\"-------new dm\")\n", " formation_entang =\\\n", " TwoQubitState.get_known_formation_entang(dm)\n", " ecase = FormationEnt(dm, num_ab_steps,\n", " recursion_init=recursion_init, verbose=True)\n", " print('entang_0: algo value, known value\\n',\n", " ecase.get_entang({1}), formation_entang)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Random 2 qubit states (entanglement calculated numerically and with Wootters formula)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "recursion_init= eigen+\n", "num_ab_steps= 50\n", "-------new dm\n", "\n", "initial norm of Dxy - sum_alp Kxy_alp, should be 0\n", " 6.384939235171076e-16\n", "--ab step= 0 , entang= 0.237977 , err= 2.373260\n", "--ab step= 1 , entang= 0.129214 , err= 1.446401\n", "--ab step= 2 , entang= 0.076794 , err= 0.830291\n", "--ab step= 3 , entang= 0.049577 , err= 0.476590\n", "--ab step= 4 , entang= 0.037716 , err= 0.404122\n", "--ab step= 5 , entang= 0.029089 , err= 0.354527\n", "--ab step= 6 , entang= 0.020476 , err= 0.278054\n", "--ab step= 7 , entang= 0.013481 , err= 0.219071\n", "--ab step= 8 , entang= 0.008770 , err= 0.170689\n", "--ab step= 9 , entang= 0.005835 , err= 0.134618\n", "--ab step= 10 , entang= 0.004050 , err= 0.108907\n", "--ab step= 11 , entang= 0.002941 , err= 0.090572\n", "--ab step= 12 , entang= 0.002220 , err= 0.077168\n", "--ab step= 13 , entang= 0.001730 , err= 0.067023\n", "--ab step= 14 , entang= 0.001380 , err= 0.059064\n", "--ab step= 15 , entang= 0.001121 , err= 0.052614\n", "--ab step= 16 , entang= 0.000922 , err= 0.047243\n", "--ab step= 17 , entang= 0.000766 , err= 0.042670\n", "--ab step= 18 , entang= 0.000641 , err= 0.038706\n", "--ab step= 19 , entang= 0.000539 , err= 0.035224\n", "--ab step= 20 , entang= 0.000455 , err= 0.032132\n", "--ab step= 21 , entang= 0.000386 , err= 0.029363\n", "--ab step= 22 , entang= 0.000328 , err= 0.026868\n", "--ab step= 23 , entang= 0.000279 , err= 0.024609\n", "--ab step= 24 , entang= 0.000237 , err= 0.022556\n", "--ab step= 25 , entang= 0.000202 , err= 0.020685\n", "--ab step= 26 , entang= 0.000173 , err= 0.018976\n", "--ab step= 27 , entang= 0.000146 , err= 0.017413\n", "--ab step= 28 , entang= 0.000125 , err= 0.015981\n", "--ab step= 29 , entang= 0.000107 , err= 0.014669\n", "--ab step= 30 , entang= 0.000091 , err= 0.013464\n", "--ab step= 31 , entang= 0.000078 , err= 0.012359\n", "--ab step= 32 , entang= 0.000066 , err= 0.011344\n", "--ab step= 33 , entang= 0.000056 , err= 0.010412\n", "--ab step= 34 , entang= 0.000048 , err= 0.009555\n", "--ab step= 35 , entang= 0.000041 , err= 0.008769\n", "--ab step= 36 , entang= 0.000035 , err= 0.008046\n", "--ab step= 37 , entang= 0.000028 , err= 0.007382\n", "--ab step= 38 , entang= 0.000024 , err= 0.006773\n", "--ab step= 39 , entang= 0.000019 , err= 0.006213\n", "--ab step= 40 , entang= 0.000015 , err= 0.005699\n", "--ab step= 41 , entang= 0.000011 , err= 0.005227\n", "--ab step= 42 , entang= 0.000008 , err= 0.004793\n", "--ab step= 43 , entang= 0.000007 , err= 0.004395\n", "--ab step= 44 , entang= 0.000005 , err= 0.004030\n", "--ab step= 45 , entang= 0.000004 , err= 0.003695\n", "--ab step= 46 , entang= 0.000000 , err= 0.003387\n", "--ab step= 47 , entang= 0.000000 , err= 0.003105\n", "--ab step= 48 , entang= 0.000000 , err= 0.002846\n", "--ab step= 49 , entang= 0.000000 , err= 0.002609\n", "entang_0: algo value, known value\n", " 2.6983292221097424e-07 0.0\n", "-------new dm\n", "\n", "initial norm of Dxy - sum_alp Kxy_alp, should be 0\n", " 3.5067073340961885e-16\n", "--ab step= 0 , entang= 0.387934 , err= 2.079383\n", "--ab step= 1 , entang= 0.270321 , err= 1.642334\n", "--ab step= 2 , entang= 0.169969 , err= 1.039376\n", "--ab step= 3 , entang= 0.138176 , err= 0.809931\n", "--ab step= 4 , entang= 0.117540 , err= 0.628656\n", "--ab step= 5 , entang= 0.102721 , err= 0.481123\n", "--ab step= 6 , entang= 0.092246 , err= 0.348755\n", "--ab step= 7 , entang= 0.086186 , err= 0.250712\n", "--ab step= 8 , entang= 0.082835 , err= 0.195276\n", "--ab step= 9 , entang= 0.080974 , err= 0.168926\n", "--ab step= 10 , entang= 0.079929 , err= 0.156532\n", "--ab step= 11 , entang= 0.079336 , err= 0.149921\n", "--ab step= 12 , entang= 0.078997 , err= 0.145953\n", "--ab step= 13 , entang= 0.078802 , err= 0.143423\n", "--ab step= 14 , entang= 0.078690 , err= 0.141768\n", "--ab step= 15 , entang= 0.078624 , err= 0.140674\n", "--ab step= 16 , entang= 0.078586 , err= 0.139944\n", "--ab step= 17 , entang= 0.078564 , err= 0.139454\n", "--ab step= 18 , entang= 0.078552 , err= 0.139122\n", "--ab step= 19 , entang= 0.078544 , err= 0.138895\n", "--ab step= 20 , entang= 0.078540 , err= 0.138738\n", "--ab step= 21 , entang= 0.078537 , err= 0.138629\n", "--ab step= 22 , entang= 0.078536 , err= 0.138551\n", "--ab step= 23 , entang= 0.078535 , err= 0.138496\n", "--ab step= 24 , entang= 0.078534 , err= 0.138456\n", "--ab step= 25 , entang= 0.078534 , err= 0.138427\n", "--ab step= 26 , entang= 0.078534 , err= 0.138405\n", "--ab step= 27 , entang= 0.078534 , err= 0.138389\n", "--ab step= 28 , entang= 0.078534 , err= 0.138377\n", "--ab step= 29 , entang= 0.078534 , err= 0.138368\n", "--ab step= 30 , entang= 0.078534 , err= 0.138362\n", "--ab step= 31 , entang= 0.078534 , err= 0.138357\n", "--ab step= 32 , entang= 0.078534 , err= 0.138353\n", "--ab step= 33 , entang= 0.078534 , err= 0.138350\n", "--ab step= 34 , entang= 0.078534 , err= 0.138347\n", "--ab step= 35 , entang= 0.078534 , err= 0.138345\n", "--ab step= 36 , entang= 0.078534 , err= 0.138344\n", "--ab step= 37 , entang= 0.078534 , err= 0.138343\n", "--ab step= 38 , entang= 0.078534 , err= 0.138342\n", "--ab step= 39 , entang= 0.078534 , err= 0.138341\n", "--ab step= 40 , entang= 0.078534 , err= 0.138341\n", "--ab step= 41 , entang= 0.078534 , err= 0.138340\n", "--ab step= 42 , entang= 0.078534 , err= 0.138340\n", "--ab step= 43 , entang= 0.078534 , err= 0.138340\n", "--ab step= 44 , entang= 0.078534 , err= 0.138340\n", "--ab step= 45 , entang= 0.078534 , err= 0.138339\n", "--ab step= 46 , entang= 0.078534 , err= 0.138339\n", "--ab step= 47 , entang= 0.078534 , err= 0.138339\n", "--ab step= 48 , entang= 0.078534 , err= 0.138339\n", "--ab step= 49 , entang= 0.078534 , err= 0.138339\n", "entang_0: algo value, known value\n", " 0.07853353408604735 0.07852966445691076\n" ] } ], "source": [ "np.random.seed(123)\n", "dm2 = DenMat(4, (2, 2))\n", "dm2.set_arr_to_rand_den_mat(np.array([.1, .2, .3, .4]))\n", "dm3 = DenMat(4, (2, 2))\n", "dm3.set_arr_to_rand_den_mat(np.array([.1, .1, .1, .7]))\n", "\n", "recursion_init = \"eigen+\"\n", "num_ab_steps = 50\n", "print(\"recursion_init=\", recursion_init)\n", "print('num_ab_steps=', num_ab_steps)\n", "for dm in [dm2, dm3]:\n", " print(\"-------new dm\")\n", " formation_entang =\\\n", " TwoQubitState.get_known_formation_entang(dm)\n", " ecase = FormationEnt(dm, num_ab_steps,\n", " recursion_init=recursion_init, verbose=True)\n", " print('entang_0: algo value, known value\\n',\n", " ecase.get_entang({1}), formation_entang)\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }