diff --git a/docs/modules/mps.rst b/docs/modules/mps.rst index 138c66b3..d6fff984 100644 --- a/docs/modules/mps.rst +++ b/docs/modules/mps.rst @@ -7,10 +7,16 @@ Matrix Product State (MPS) Simulation ~~~~~~~~~~ +.. autofunction:: pytket.extensions.cutensornet.mps.simulate + .. autoenum:: pytket.extensions.cutensornet.mps.ContractionAlg() :members: -.. autofunction:: pytket.extensions.cutensornet.mps.simulate +.. autoclass:: pytket.extensions.cutensornet.mps.ConfigMPS() + + .. automethod:: __init__ + +.. autoclass:: pytket.extensions.cutensornet.mps.CuTensorNetHandle Classes @@ -47,8 +53,6 @@ Classes .. automethod:: __init__ -.. autoclass:: pytket.extensions.cutensornet.mps.CuTensorNetHandle - Miscellaneous ~~~~~~~~~~~~~ diff --git a/examples/mpi/mpi_overlap_bcast_mps.py b/examples/mpi/mpi_overlap_bcast_mps.py index 36993231..a0d662d9 100644 --- a/examples/mpi/mpi_overlap_bcast_mps.py +++ b/examples/mpi/mpi_overlap_bcast_mps.py @@ -44,6 +44,7 @@ from pytket.extensions.cutensornet.mps import ( simulate, + ConfigMPS, ContractionAlg, CuTensorNetHandle, ) @@ -108,7 +109,7 @@ this_proc_mps = [] with CuTensorNetHandle(device_id) as libhandle: # Different handle for each process for circ in this_proc_circs: - mps = simulate(libhandle, circ, ContractionAlg.MPSxGate) + mps = simulate(libhandle, circ, ContractionAlg.MPSxGate, ConfigMPS()) this_proc_mps.append(mps) if rank == root: diff --git a/examples/mps_tutorial.ipynb b/examples/mps_tutorial.ipynb index f1a2a555..237504e7 100644 --- a/examples/mps_tutorial.ipynb +++ b/examples/mps_tutorial.ipynb @@ -15,6 +15,7 @@ "\n", "from pytket.extensions.cutensornet.mps import (\n", " CuTensorNetHandle,\n", + " ConfigMPS,\n", " ContractionAlg,\n", " simulate, \n", " prepare_circuit\n", @@ -97,7 +98,7 @@ "\n", "\n", "\n", - " <div id="circuit-display-vue-container-e13d14af-9a4e-4029-8388-8fb18c773bf6" class="pytket-circuit-display-container">\n", + " <div id="circuit-display-vue-container-6f3d27c2-9192-4cb0-a7ab-af175d1b97d3" class="pytket-circuit-display-container">\n", " <div style="display: none">\n", " <div id="circuit-json-to-display">{"bits": [], "commands": [{"args": [["q", [0]], ["q", [1]]], "op": {"type": "CZ"}}, {"args": [["q", [2]]], "op": {"type": "H"}}, {"args": [["q", [3]], ["q", [4]]], "op": {"type": "CX"}}, {"args": [["q", [0]]], "op": {"params": ["0.2"], "type": "Ry"}}, {"args": [["q", [2]], ["q", [1]]], "op": {"params": ["0.3", "0.5", "0.7"], "type": "TK2"}}, {"args": [["q", [4]], ["q", [3]]], "op": {"params": ["0.1"], "type": "ZZPhase"}}], "created_qubits": [], "discarded_qubits": [], "implicit_permutation": [[["q", [0]], ["q", [0]]], [["q", [1]], ["q", [1]]], [["q", [2]], ["q", [2]]], [["q", [3]], ["q", [3]]], [["q", [4]], ["q", [4]]]], "phase": "0.0", "qubits": [["q", [0]], ["q", [1]], ["q", [2]], ["q", [3]], ["q", [4]]]}</div>\n", " </div>\n", @@ -107,7 +108,7 @@ " ></circuit-display-container>\n", " </div>\n", " <script type="application/javascript">\n", - " const circuitRendererUid = "e13d14af-9a4e-4029-8388-8fb18c773bf6";\n", + " const circuitRendererUid = "6f3d27c2-9192-4cb0-a7ab-af175d1b97d3";\n", " const displayOptions = JSON.parse('{}');\n", "\n", " // Script to initialise the circuit renderer app\n", @@ -168,7 +169,7 @@ "id": "a9ede80b-32d0-4d43-b910-099dcc2a8a95", "metadata": {}, "source": [ - "For **exact** simulation, simply call the `simulate` function on the circuit and choose a contraction algorithm. To learn more about the contraction algorithms we provide see the *Contraction algorithms* section of this notebook.\n", + "For **exact** simulation, simply call the `simulate` function on the circuit and choose a contraction algorithm. To learn more about the contraction algorithms we provide see the *Contraction algorithms* section of this notebook. You will also need to provide a configuration, the default one is provided by `ConfigMPS()`. Custom settings of `ConfigMPS` are discussed in the *Approximate simulation* section.\n", "\n", "**NOTE**: whenever you wish to generate an `MPS` object or execute calculations on it you must do so within a `with CuTensorNetHandle() as libhandle:` block; this will initialise the cuTensorNetwork library for you, and destroy its handles at the end of the `with` block. You will need to pass the `libhandle` to the `MPS` object via the method that generates it (in the snippet below, `simulate`), or if already initialised, pass it via the `update_libhandle` method.\n", "\n", @@ -183,7 +184,7 @@ "outputs": [], "source": [ "with CuTensorNetHandle() as libhandle:\n", - " my_mps = simulate(libhandle, my_circ, ContractionAlg.MPSxGate)" + " my_mps = simulate(libhandle, my_circ, ContractionAlg.MPSxGate, ConfigMPS())" ] }, { @@ -216,7 +217,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "(0.039688840897737394+0.05462700305610265j)\n" + "(0.03968884089773739+0.05462700305610267j)\n" ] } ], @@ -285,7 +286,7 @@ "outputs": [ { "data": { - "image/png": "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GzdOJ06c0EMPPaTMzEx16dJFK1assGaMGQAA4JccpqyhBmuIrKwsuVwuud1uhYeHW10OAEBSbm6uUlJS1LRp07P+CAQ129mOg8p8f1s+zgwAAMC5IMwAAABbI8wAAFBDDB8+XH/84x+tLuO8I8wAAFAJw4cPl8PhKPFKTEy0ujS9+OKLWrhwodVlSCoa9PaDDz44L5/l179mAgCgVLluKe+Y5GpUcpr7sOQMrdYn3icmJmrBggVebVYO2FpQUCCHwyGXq/r67M84MwMAsJdct7ToT9LCfpL7R+9p7h+L2hf9qWi+auJ0OhUdHe31atCggVatWqXAwEB9+eWXnnlnzJihCy+8UGlpaZKkXr16afTo0Ro9erTq16+viIgIPfHEE17Pb8rPz9e4cePUqFEjhYSEqEuXLl4D4i1cuFD169fXRx99pNatW8vpdOrgwYMlLjP16tVLDz/8sJKSktSgQQNFRUVp7ty5ysnJ0d13362wsDA1b95cn376qVf/du/erX79+ik0NFRRUVEaMmSIfv31V6/1PvLIIxo3bpwaNmyo6OhoTZ482TO9SZMmkqRbbrlFDofD8766EGYAAPaSd0zK+UXKPCAtvPH3QOP+seh95oGi6XnHzntpvXr1UlJSkoYMGSK3261vv/1WEydO1Lx587wezfPGG2/oggsu0Pr16zV79mzNnDlT8+fP90y/++679fXXX2vx4sXavn27br31ViUmJmrfvn2eeY4fP65p06Zp/vz52rVrlyIjI0ut6Y033tCFF16oDRs26OGHH9aDDz6oW2+9Vd26ddOWLVvUp08fDRkyRMePH5dU9JDKnj176oorrtCmTZu0fPly/fzzz7rttttKrDckJETr16/X9OnT9dRTTyk5OVmSPA+QXrBggdLS0kp9oHSVMjWc2+02kozb7ba6FADA/5w4ccLs3r3bnDhxwrcV/JZqzKx2xjwZXvTfg+u83/+WWrUFn2bYsGEmICDAhISEeL2eeuopY4wxeXl55sorrzS33Xabufzyy829997rtXzPnj3NZZddZgoLCz1t48ePN5dddpkxxpjvv//eOBwOc/jwYa/lrr/+ejNhwgRjjDELFiwwksy2bdtK1DZgwACvz7rmmms870+dOmVCQkLMkCFDPG1paWlGkvnmm2+MMcZMmjTJJCQkeK03NTXVSDJ79+4tdb3GGHPVVVeZ8ePHe95LMkuXLi1jKxY523FQme9v7pkBANiPK04a/vHvZ2JeTyhqb9CkqN0VV60ff+211+rVV1/1amvYsKEkKTAwUIsWLVK7du3UuHFjzZo1q8TyV199tRwOh+d9165dNWPGDBUUFGjLli0yxqhVq1Zey+Tl5Ski4vcnhAcGBqpdu3bl1nr6PAEBAYqIiFDbtm09bcUPb87IyJBU9CDolStXKjQ0tMS6fvjhB09dZ352TEyMZx3nG2EGAGBPrjjplrm/Bxmp6H01Bxmp6FmCLVq0KHP62rVrJUlHjx7V0aNHFRISUuF1FxYWKiAgQJs3b1ZAQIDXtNMDRlBQkFcgKkvdunW93jscDq+24nUUFhZ6/tu/f/9SH+p8+qWy0tZbvI7zjTADALAn94/S0vu925bef17OzJzNDz/8oDFjxmjevHl67733NHToUH3++eeqU+f321TXrVvntcy6devUsmVLBQQE6Morr1RBQYEyMjLUvXv3812+OnTooH//+99q0qSJLrjA95hQt25dFRQUVGFlZeMGYACA/Zx+s2+DJtKIFUX/PfOm4GqSl5en9PR0r9evv/6qgoICDRkyRAkJCbr77ru1YMEC7dy5UzNmzPBaPjU1VWPHjtXevXv1zjvv6KWXXtKjjz4qSWrVqpXuuusuDR06VEuWLFFKSoo2btyo559/Xp988km19kuSRo0apaNHj2rQoEHasGGD9u/frxUrVmjEiBGVCidNmjTR559/rvT0dGVmZlZjxYQZAIDduA97B5nhH0sXdyn6r1egOVxtJSxfvlwxMTFer2uuuUbPPvusDhw4oLlz50qSoqOjNX/+fD3xxBPatm2bZ/mhQ4fqxIkT6ty5s0aNGqWHH35Y99//+1mmBQsWaOjQoXrsscd0ySWX6Oabb9b69esVHx9fbX0qFhsbq6+//loFBQXq06eP2rRpo0cffVQul8vr7FJ5ZsyYoeTkZMXHx+vKK6+sxop5ajYAwALn9NTs4nFmcn4peUmp+IxNyEXS4H9X68B5vurVq5euuOKKUm8Mrm2q6qnZ3DMDALCXeq6ioFLaCMCuOGn4J9U+AjD8C2EGAGA/9Vxlh5XSHnGAGo0wAwDAeXT6YwlQNbgBGAAA2BphBgBgmRr+GxSUo6r2P2EGAHDeFY8eW/xwQ9ROxfv/zNGEK4t7ZgAA511AQIDq16/veZZPcHBwhYbmR81gjNHx48eVkZGh+vXrl3hsQ2URZgAAloiOjpYkyx5OCOvVr1/fcxycC8IMAMASDodDMTExioyM1MmTJ60uB+dZ3bp1z/mMTDHCDADAUgEBAVX2pYbaiRuAAQCArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArVkaZl599VW1a9dO4eHhCg8PV9euXfXpp596phtjNHnyZMXGxiooKEi9evXSrl27LKwYAAD4G0vDTFxcnJ577jlt2rRJmzZt0nXXXacBAwZ4Asv06dP1wgsvaM6cOdq4caOio6PVu3dvZWdnW1k2AADwIw5jjLG6iNM1bNhQf//73zVixAjFxsYqKSlJ48ePlyTl5eUpKipKzz//vEaOHFmh9WVlZcnlcsntdis8PLw6SwcAAFWkMt/ffnPPTEFBgRYvXqycnBx17dpVKSkpSk9PV0JCgmcep9Opnj17au3atWWuJy8vT1lZWV4vAABQc1keZnbs2KHQ0FA5nU498MADWrp0qVq3bq309HRJUlRUlNf8UVFRnmmlmTZtmlwul+cVHx9frfUDAABrWR5mLrnkEm3btk3r1q3Tgw8+qGHDhmn37t2e6Q6Hw2t+Y0yJttNNmDBBbrfb80pNTa222gEAgPUusLqAwMBAtWjRQpLUqVMnbdy4US+++KLnPpn09HTFxMR45s/IyChxtuZ0TqdTTqezeosGAAB+w/IzM2cyxigvL09NmzZVdHS0kpOTPdPy8/O1evVqdevWzcIKAQCAP7H0zMxf//pX9e3bV/Hx8crOztbixYu1atUqLV++XA6HQ0lJSZo6dapatmypli1baurUqQoODtadd95pZdkAAMCPWBpmfv75Zw0ZMkRpaWlyuVxq166dli9frt69e0uSxo0bpxMnTuihhx5SZmamunTpohUrVigsLMzKsgEAgB/xu3FmqhrjzAAAYD+2HGcGAADAF4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABga4QZAABgaz6FmdTUVP3444+e9xs2bFBSUpLmzp1bZYUBAABUhE9h5s4779TKlSslSenp6erdu7c2bNigv/71r3rqqaeqtEAAAICz8SnM7Ny5U507d5Ykvffee2rTpo3Wrl2rt99+WwsXLqzK+gAAAM7KpzBz8uRJOZ1OSdJnn32mm2++WZJ06aWXKi0treqqAwAAKIdPYebyyy/XP/7xD3355ZdKTk5WYmKiJOmnn35SRERElRYIAABwNj6Fmeeff16vvfaaevXqpUGDBql9+/aSpGXLlnkuPwEAAJwPDmOM8WXBgoICZWVlqUGDBp62AwcOKDg4WJGRkVVW4LnKysqSy+WS2+1WeHi41eUAAIAKqMz3t8/jzBhjtHnzZr322mvKzs6WJAUGBio4ONjXVQIAAFTaBb4sdPDgQSUmJurQoUPKy8tT7969FRYWpunTpys3N1f/+Mc/qrpOAACAUvl0ZubRRx9Vp06dlJmZqaCgIE/7Lbfcos8//7zKigMAACiPT2dmvvrqK3399dcKDAz0am/cuLEOHz5cJYUBAABUhE9nZgoLC1VQUFCi/ccff1RYWNg5FwUAAFBRPoWZ3r17a9asWZ73DodDx44d05NPPql+/fpVVW0AAADl8umn2T/99JOuvfZaBQQEaN++ferUqZP27dunCy+8UGvWrOGn2QAA4JxU5vvbp3tmYmNjtW3bNr3zzjvasmWLCgsLdc899+iuu+7yuiEYAACguvk8aJ5dcGYGAAD7qZYzM8uWLatwAcUPngQAAKhuFQ4zf/zjHys0n8PhKPWXTgAAANWhwmGmsLCwOusAAADwic/PZgIAAPAHPoeZzz//XDfddJOaN2+uFi1a6KabbtJnn31WlbUBAACUy6cwM2fOHCUmJiosLEyPPvqoHnnkEYWHh6tfv36aM2dOVdcIAABQJp9+mt2oUSNNmDBBo0eP9mp/+eWX9eyzz+qnn36qsgLPFT/NBgDAfirz/e3TmZmsrCwlJiaWaE9ISFBWVpYvqwQAAPCJT2Hm5ptv1tKlS0u0/+c//1H//v3PuSgAAICK8ulxBpdddpmeffZZrVq1Sl27dpUkrVu3Tl9//bUee+wxzZ492zPvI488UjWVAgAAlMKne2aaNm1asZU7HNq/f3+li6pK3DMDAID9VPuDJlNSUnwq7EzTpk3TkiVL9P/+3/9TUFCQunXrpueff16XXHKJZx5jjKZMmaK5c+cqMzNTXbp00csvv6zLL7+8SmoAAAD2ZumgeatXr9aoUaO0bt06JScn69SpU0pISFBOTo5nnunTp+uFF17QnDlztHHjRkVHR6t3797Kzs62sHIAAOAvfLrMZIzR+++/r5UrVyojI6PEow6WLFniUzG//PKLIiMjtXr1avXo0UPGGMXGxiopKUnjx4+XJOXl5SkqKkrPP/+8Ro4cWe46ucwEAID9VPtPsx999FENGTJEKSkpCg0Nlcvl8nr5yu12S5IaNmwoqehyVnp6uhISEjzzOJ1O9ezZU2vXri11HXl5ecrKyvJ6AQCAmsune2YWLVqkJUuWqF+/flVWiDFGY8eO1TXXXKM2bdpIktLT0yVJUVFRXvNGRUXp4MGDpa5n2rRpmjJlSpXVBQAA/JtPZ2ZcLpeaNWtWpYWMHj1a27dv1zvvvFNimsPh8HpvjCnRVmzChAlyu92eV2pqapXWCQAA/ItPYWby5MmaMmWKTpw4USVFPPzww1q2bJlWrlypuLg4T3t0dLSk38/QFMvIyChxtqaY0+lUeHi41wsAANRcPoWZW2+9VZmZmYqMjFTbtm3VoUMHr1dFGWM0evRoLVmyRF988UWJ8WuaNm2q6OhoJScne9ry8/O1evVqdevWzZfSAQBADePTPTPDhw/X5s2bNXjwYEVFRZV5yac8o0aN0ttvv63//Oc/CgsL85yBcblcCgoKksPhUFJSkqZOnaqWLVuqZcuWmjp1qoKDg3XnnXf69JkAAKBm8emn2SEhIfrvf/+ra6655tw+vIwQtGDBAg0fPlzS74Pmvfbaa16D5hXfJFwefpoNAID9VOb726cwc+mll+q9995Tu3btfC7yfCHMAABgP9U+zsyMGTM0btw4HThwwJfFAQAAqoxP98wMHjxYx48fV/PmzRUcHKy6det6TT969GiVFAcAAFAen8LMrFmzqrgMAAAA3/gUZoYNG1bVdQAAAPjEpzBzuhMnTujkyZNebdxoCwAAzhefbgDOycnR6NGjFRkZqdDQUDVo0MDrBQAAcL74FGbGjRunL774Qq+88oqcTqfmz5+vKVOmKDY2Vm+++WZV1wgAAFAmny4zffjhh3rzzTfVq1cvjRgxQt27d1eLFi3UuHFjvfXWW7rrrruquk4AAIBS+XRm5ujRo57nKIWHh3t+in3NNddozZo1VVcdAABAOXwKM82aNfMMmNe6dWu99957korO2NSvX7+qagMAACiXT2Hm7rvv1rfffitJmjBhgufemTFjxugvf/lLlRYIAABwNj49m+lMhw4d0qZNm9S8eXO1b9++KuqqMjybCQAA+6m2ZzOtX79en376qVfbm2++qZ49e+qBBx7Qyy+/rLy8vMpXDAAA4KNKhZnJkydr+/btnvc7duzQPffcoxtuuEETJkzQhx9+qGnTplV5kQAAAGWpVJjZtm2brr/+es/7xYsXq0uXLpo3b57GjBmj2bNne24GBgAAOB8qFWYyMzMVFRXleb969WolJiZ63l911VVKTU2tuuoAAADKUakwExUVpZSUFElSfn6+tmzZoq5du3qmZ2dnq27dulVbIQAAwFlUKswkJibq8ccf15dffqkJEyYoODhY3bt390zfvn27mjdvXuVFAgAAlKVSjzN45plnNHDgQPXs2VOhoaF64403FBgY6Jn++uuvKyEhocqLBAAAKItP48y43W6FhoYqICDAq/3o0aMKDQ31CjhWY5wZAADspzLf3z49aNLlcpXa3rBhQ19WBwAA4DOfHmcAAADgLwgzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggzAADA1ggz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7Fjde++9uuGGG/Tcc8/phx9+KPPzKjPvrbfeqhMnTqhZs2a67777tHTpUp06deqs/SkoKNCzzz6rdu3aKSIiQqGhoVqxYoVXvaXZvHmzVq5cqdDQUM/r0ksvlST98MMPat++va6//nq1bdtWt956q+bNm6fMzMyzrhNA1SDMADirkJAQtWjRQi1atFDnzp31z3/+Uzk5OZo3b54kad26dbrjjjvUt29fffTRR9q6dasmTpyo/Px8zzomT56sXbt26cYbb9QXX3yh1q1ba+nSpaV+XmXmjY+P1969e/Xyyy8rKChIDz30kHr06OF1v86ZZsyYoZkzZ2rcuHH64osvtG3bNvXp08er3tIUFhaqf//+nmBX/Nq3b5969OihgIAAJScn69NPP1Xr1q310ksv6ZJLLlFKSkp5mxjAOSLMAKgUh8OhOnXq6MSJE5Kkr7/+Wo0bN9bEiRPVqVMntWzZ0uusTbFWrVppzJgxWrFihQYOHKgFCxaU+RmVmTcoKEg333yzZs+erVWrVumbb77Rjh07JEmBgYEqKCjwmv/LL7/UgAEDNHjwYLVv317NmjXTvn37vOYpbbkOHTpo165datKkiSfcFb9CQkI82+YPf/iDpkyZoq1btyowMLDMIAag6hBmAJxVXl6e0tPTlZ6erj179ujhhx/WsWPH1L9/f0lSixYtdOjQIS1evFg//PCDZs+e7fUFfuLECY0ePVqrVq3SwYMH9fXXX2vjxo267LLLSnxWZeaVin4J9c9//lM7d+7U/v379a9//UtBQUFq3LixpKJxZtasWaPDhw97fnXUokULJScna+3atdqzZ49Gjhyp9PR0r/U2adJE69ev14EDB/Trr7+qsLBQo0aN0tGjRzVo0CBt2LBB+/fv14oVKzRixAgVFBRo/fr1mjp1qjZt2qRDhw5pyZIl+uWXX8qsHUAVsvqmHQD+a9iwYUaS5xUWFmauuuoq8/7773vN95e//MVERESY0NBQc/vtt5uZM2d6burNy8szd9xxh4mPjzeBgYEmNjbWjB492pw4ccIY430DcHnznmnp0qWmS5cuJjw83ISEhJirr77afPbZZ57p33zzjWnXrp1xOp2m+K+7I0eOmAEDBpjQ0FATGRlpnnjiCTN06FAzYMAAz3J79+41V199tQkKCjKSTEpKijHGmO+++87ccsstpn79+iYoKMhceumlJikpyRQWFprdu3ebPn36mIsuusg4nU7TqlUr89JLL1XBXgBQHocx/G4QAADYF5eZAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArRFmAACArf1/hYs84yYwXkgAAAAASUVORK5CYII=", + "image/png": "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wYIFuuOOO1RcXKzjx4+7nZU5cuSIIiMjK5yfv7+//P39a7tsAADgBUw/I3O+0tJSFRUVqWfPnvL19dX69etdw/bs2aPMzEzFx8ebWCEAAPAWpp6RmT17tgYNGqRWrVrpxIkTeuutt5SSkqJPP/1Udrtd99xzj2bOnKlmzZopJCRE999/v+Lj4yt9xxIAAKjfTA0yubm5Gjt2rLKzs2W329WtWzd9+umnuummmyRJ8+fPV6NGjTRixAgVFRVp4MCBeuWVV8wsGQAAeBGve45MTeM5MgAAWI/lniMDAABQVQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWR4FmaysLB08eND1fdOmTZo+fboWL15cY4UBAABcjEdB5q677tKGDRskSTk5Obrpppu0adMmPfzww3riiSdqtEAAAICKeBRkduzYoV69ekmS/vnPf6pLly765ptv9OabbyopKakm6wMAAKiQR0Hm9OnT8vf3lyR9/vnn+v3vfy9J6tixo7Kzs2uuOgAAgAvwKMhcfvnleu211/TVV19p3bp1SkxMlCQdPnxY4eHhNVogAABARTwKMs8++6wWLVqkfv36aeTIkerevbsk6aOPPnJdcgIAAKhtNsMwDE8mLCkpUV5ensLCwlxt+/fvV9OmTdWyZcsaK7C68vLyZLfb5XA4FBISYnY5AACgEir7++3xc2QMw1B6eroWLVqkEydOSJL8/PzUtGlTT2cJAABQJY09mejAgQNKTExUZmamioqKdNNNNyk4OFjPPvusioqK9Nprr9V0nQAAAGV4dEZm2rRpuuqqq3Ts2DEFBAS42ocNG6b169fXWHEAAAAX4tEZma+++krffPON/Pz83Nrj4uJ06NChGikMAADgYjw6I1NaWqqSkpIy7QcPHlRwcHC1iwIAAKgMj4LMgAED9OKLL7q+22w25efna86cORo8eHBN1QYAAHBBHt1+ffDgQQ0cOFCGYWjv3r266qqrtHfvXjVv3lxffvklt18DAIBqqezvt8fPkfntt9+0cuVKbd++Xfn5+erRo4dGjRrl1vnXGxBkAACwnsr+fnvU2VeSGjdurNGjR3s6OQAAQLVVOsh89NFHlZ7pmZdIAgAA1KZKB5lbb721UuPZbLZy72gCAACoaZUOMqWlpbVZBwAAQJV5/K4lAAAAs3kcZNavX69bbrlFl156qS699FLdcsst+vzzz2uyNgAAgAvyKMi88sorSkxMVHBwsKZNm6Zp06YpJCREgwcP1ssvv1zTNQIAAJTLo+fIxMTEaNasWZo6dapb+8svv6y//vWvXvW+JZ4jAwCA9VT299ujMzLHjx9XYmJimfYBAwbI4XB4MksAAIAq8yjI/P73v1dycnKZ9g8//FC33HJLtYsCAACoDI+e7Nu5c2c9/fTTSklJUXx8vCTp22+/1ddff60HH3xQCxcudI37wAMP1EylAAAA5/Goj0ybNm0qN3ObTf/973+rXFRNoo8MAADWU6vvWsrIyPC4MAAAgJrCA/EAAIBleXRGxjAMvffee9qwYYNyc3PLvL5g1apVNVIcAADAhXgUZKZPn65FixbphhtuUEREhGw2W03XBQAAcFEeBZn//d//1apVqzR48OBqLXzevHlatWqVfvzxRwUEBOh3v/udnn32WXXo0ME1TmFhoR588EGtXLlSRUVFGjhwoF555RVFRERUa9kAAMD6POojY7fb1bZt22ovPDU1VVOmTNG3336rdevW6fTp0xowYIAKCgpc48yYMUOrV6/Wu+++q9TUVB0+fFjDhw+v9rIBAID1eXT79RtvvKG1a9fq9ddfV0BAQI0V8/PPP6tly5ZKTU1V37595XA41KJFC7311lv6wx/+IEn68ccf1alTJ6WlpalPnz4XnSe3XwMAYD21evv17bffrrffflstW7ZUXFycfH193YZv3brVk9m6Xm/QrFkzSVJ6erpOnz6thIQE1zgdO3ZUq1atKgwyRUVFKioqcn3Py8vzqBYAAOD9PAoy48aNU3p6ukaPHl1jnX1LS0s1ffp0XXPNNerSpYskKScnR35+fgoNDXUbNyIiQjk5OeXOZ968eZo7d2616wEAAN7PoyCzZs0affrpp7r22mtrrJApU6Zox44d+ve//12t+cye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lRr3fC+88ILRvn17o7i4uNzhrVu3NubPn3/R+dx8883Ggw8+6Pp+/fXXG9OmTXMb58knnzQGDBjg1paVlWVIMvbs2WOkp6cbkoz9+/dXqnYANYMzMgAu6IYbbtC2bdu0bds2bdq0SQMHDtSgQYN04MAB1zjvvPOOrrnmGkVGRiooKEiPPPKIMjMzXcNnzpypP/7xj0pISNAzzzyjffv2Vbi8qox722236dSpU2rbtq0mTpyo5ORk/fbbbxdcn5KSEj355JPq2rWrmjVrpqCgIH366adu9Zbn+++/14YNGxQUFOT6dOzYUZK0b98+de/eXf3791fXrl112223acmSJTp27NgF5wmg+ggyAC4oMDBQ7dq1U7t27XT11Vdr6dKlKigo0JIlSyRJaWlpGjVqlAYPHqyPP/5Y3333nR5++GEVFxe75vH4449r586duvnmm/XFF1+oc+fOSk5OLnd5VRk3NjZWe/bs0SuvvKKAgADdd9996tu3r1v/nPM9//zzWrBggR566CFt2LBB27Zt08CBA93qLU9+fr6GDBniCnVnPnv37lXfvn3l4+OjdevW6ZNPPlHnzp310ksvqUOHDsrIyLjYJgZQDQQZAFVis9nUqFEjnTp1SpL0zTffqHXr1nr44Yd11VVX6bLLLnM7W3NG+/btNWPGDH322WcaPny4li1bVuEyqjJuQECAhgwZooULFyolJUVpaWn64YcfJEl+fn4qKSlxG//rr7/W0KFDNXr0aHXv3l1t27Ytc/t3edP16NFDO3fuVFxcnCvYnfkEBga6ts0111yjuXPn6rvvvpOfn1+FIQxAzSDIALigoqIi5eTkKCcnR7t379b999/vOjshSZdddpkyMzO1cuVK7du3TwsXLnT78T516pSmTp2qlJQUHThwQF9//bU2b96sTp06lVlWVcaVnHc8/eMf/9COHTv03//+VytWrFBAQIBat24tyfkcmS+//FKHDh1y3V102WWXad26dfrmm2+0e/du/b//9/905MgRt/nGxcVp48aN2r9/v3755ReVlpZqypQpOnr0qEaOHKnNmzdr3759+vTTTzVhwgSVlJRo48aN+utf/6otW7YoMzNTq1at0s8//1xh7QBqiNmddAB4r3HjxhmSXJ/g4GDj6quvNt577z238f785z8b4eHhRlBQkHHHHXcY8+fPd3XgLSoqMu68804jNjbW8PPzM6Kjo42pU6cap06dMgzDvbPvxcY9X3JystG7d28jJCTECAwMNPr06WN8/vnnruFpaWlGt27dDH9/f+PMP3e//vqrMXToUCMoKMho2bKl8cgjjxhjx441hg4d6ppuz549Rp8+fYyAgABDkpGRkWEYhmH85z//MYYNG2aEhoYaAQEBRseOHY3p06cbpaWlxq5du4yBAwcaLVq0MPz9/Y327dsbL730Ug3sBQAXYjMM7g0EAADWxKUlAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWf8frP1e4F+3sjkAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -394,7 +395,7 @@ "\n", "# Simulate them\n", "with CuTensorNetHandle() as libhandle:\n", - " other_mps = simulate(libhandle, other_circ, ContractionAlg.MPSxGate)" + " other_mps = simulate(libhandle, other_circ, ContractionAlg.MPSxGate, ConfigMPS())" ] }, { @@ -473,7 +474,7 @@ "\n", "\n", "\n", - " <div id="circuit-display-vue-container-067d69bc-bdde-4810-ac70-5b0fe1129460" class="pytket-circuit-display-container">\n", + " <div id="circuit-display-vue-container-04ed427a-5ec8-4e3d-9fbf-e11d67078a06" class="pytket-circuit-display-container">\n", " <div style="display: none">\n", " <div id="circuit-json-to-display">{"bits": [], "commands": [{"args": [["q", [1]]], "op": {"type": "H"}}, {"args": [["q", [2]], ["q", [3]]], "op": {"params": ["0.3"], "type": "ZZPhase"}}, {"args": [["q", [4]]], "op": {"params": ["0.8"], "type": "Ry"}}, {"args": [["q", [0]], ["q", [1]]], "op": {"type": "CX"}}, {"args": [["q", [3]], ["q", [4]]], "op": {"type": "CZ"}}, {"args": [["q", [1]], ["q", [2]]], "op": {"params": ["0.7"], "type": "XXPhase"}}, {"args": [["q", [1]], ["q", [4]]], "op": {"params": ["0.1", "0.2", "0.4"], "type": "TK2"}}], "created_qubits": [], "discarded_qubits": [], "implicit_permutation": [[["q", [0]], ["q", [0]]], [["q", [1]], ["q", [1]]], [["q", [2]], ["q", [2]]], [["q", [3]], ["q", [3]]], [["q", [4]], ["q", [4]]]], "phase": "0.0", "qubits": [["q", [0]], ["q", [1]], ["q", [2]], ["q", [3]], ["q", [4]]]}</div>\n", " </div>\n", @@ -483,7 +484,7 @@ " ></circuit-display-container>\n", " </div>\n", " <script type="application/javascript">\n", - " const circuitRendererUid = "067d69bc-bdde-4810-ac70-5b0fe1129460";\n", + " const circuitRendererUid = "04ed427a-5ec8-4e3d-9fbf-e11d67078a06";\n", " const displayOptions = JSON.parse('{}');\n", "\n", " // Script to initialise the circuit renderer app\n", @@ -557,7 +558,7 @@ "source": [ "with CuTensorNetHandle() as libhandle:\n", " try:\n", - " simulate(libhandle, bad_circ, ContractionAlg.MPSxGate)\n", + " simulate(libhandle, bad_circ, ContractionAlg.MPSxGate, ConfigMPS())\n", " except RuntimeError as e:\n", " print(e)" ] @@ -601,7 +602,7 @@ "\n", "\n", "\n", - " <div id="circuit-display-vue-container-87b5c904-f430-4e00-b6c6-601952b6581f" class="pytket-circuit-display-container">\n", + " <div id="circuit-display-vue-container-08a5a05d-8989-43a0-a5a9-8c83ea08f5a6" class="pytket-circuit-display-container">\n", " <div style="display: none">\n", " <div id="circuit-json-to-display">{"bits": [], "commands": [{"args": [["node", [1]]], "op": {"params": ["0.8"], "type": "Ry"}}, {"args": [["node", [3]]], "op": {"type": "H"}}, {"args": [["node", [0]], ["node", [1]]], "op": {"type": "SWAP"}}, {"args": [["node", [4]], ["node", [3]]], "op": {"type": "CX"}}, {"args": [["node", [2]], ["node", [1]]], "op": {"params": ["0.3"], "type": "ZZPhase"}}, {"args": [["node", [1]], ["node", [0]]], "op": {"type": "CZ"}}, {"args": [["node", [3]], ["node", [2]]], "op": {"params": ["0.7"], "type": "XXPhase"}}, {"args": [["node", [3]], ["node", [2]]], "op": {"type": "SWAP"}}, {"args": [["node", [2]], ["node", [1]]], "op": {"type": "SWAP"}}, {"args": [["node", [1]], ["node", [0]]], "op": {"params": ["0.1", "0.2", "0.4"], "type": "TK2"}}], "created_qubits": [], "discarded_qubits": [], "implicit_permutation": [[["node", [0]], ["node", [0]]], [["node", [1]], ["node", [1]]], [["node", [2]], ["node", [2]]], [["node", [3]], ["node", [3]]], [["node", [4]], ["node", [4]]]], "phase": "0.0", "qubits": [["node", [0]], ["node", [1]], ["node", [2]], ["node", [3]], ["node", [4]]]}</div>\n", " </div>\n", @@ -611,7 +612,7 @@ " ></circuit-display-container>\n", " </div>\n", " <script type="application/javascript">\n", - " const circuitRendererUid = "87b5c904-f430-4e00-b6c6-601952b6581f";\n", + " const circuitRendererUid = "08a5a05d-8989-43a0-a5a9-8c83ea08f5a6";\n", " const displayOptions = JSON.parse('{}');\n", "\n", " // Script to initialise the circuit renderer app\n", @@ -694,7 +695,7 @@ ], "source": [ "with CuTensorNetHandle() as libhandle:\n", - " prep_mps = simulate(libhandle, prep_circ, ContractionAlg.MPSxGate)\n", + " prep_mps = simulate(libhandle, prep_circ, ContractionAlg.MPSxGate, ConfigMPS())\n", " print(\"Did simulation succeed?\")\n", " print(prep_mps.is_valid())" ] @@ -711,7 +712,7 @@ "* Bound the maximum value of the virtual bond dimension `chi`. If a bond dimension would increase past that point, we *truncate* (i.e. discard) the degrees of freedom that contribute the least to the state description. We can keep track of a lower bound of the error that this truncation causes.\n", "* Provide a value for acceptable two-qubit gate fidelity `truncation_fidelity`. After each two-qubit gate we truncate the dimension of virtual bonds as much as we can while guaranteeing the target gate fidelity. The more fidelity you require, the longer it will take to simulate. **Note**: this is *not* the final fidelity of the output state, but the fidelity per gate.\n", "\n", - "To showcase approximate simulation, let's define a circuit where exact MPS contraction starts struggling." + "Values for `chi` and `truncation_fidelity` can be set via `ConfigMPS`. To showcase approximate simulation, let's define a circuit where exact MPS contraction starts struggling." ] }, { @@ -774,17 +775,18 @@ "output_type": "stream", "text": [ "Time taken by approximate contraction with bound chi:\n", - "1.47 seconds\n", + "1.89 seconds\n", "\n", "Lower bound of the fidelity:\n", - "0.3587\n" + "0.3742\n" ] } ], "source": [ "start = time()\n", "with CuTensorNetHandle() as libhandle:\n", - " bound_chi_mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, chi=16)\n", + " config = ConfigMPS(chi=16)\n", + " bound_chi_mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, config)\n", "end = time()\n", "print(\"Time taken by approximate contraction with bound chi:\")\n", "print(f\"{round(end-start,2)} seconds\")\n", @@ -811,17 +813,18 @@ "output_type": "stream", "text": [ "Time taken by approximate contraction with fixed truncation fidelity:\n", - "2.62 seconds\n", + "2.89 seconds\n", "\n", "Lower bound of the fidelity:\n", - "0.9334\n" + "0.9298\n" ] } ], "source": [ "start = time()\n", "with CuTensorNetHandle() as libhandle:\n", - " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, truncation_fidelity=0.999)\n", + " config = ConfigMPS(truncation_fidelity=0.999)\n", + " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, config)\n", "end = time()\n", "print(\"Time taken by approximate contraction with fixed truncation fidelity:\")\n", "print(f\"{round(end-start,2)} seconds\")\n", @@ -852,7 +855,7 @@ "* **k**: The maximum number of layers the MPO is allowed to have before being contracted. Increasing this might increase fidelity, but it will also increase resource requirements exponentially. Default value is `4`.\n", "* **optim_delta**: Stopping criteria for the optimisation when contracting the `k` layers of MPO. Stops when the increase of fidelity between iterations is smaller than `optim_delta`. Default value is `1e-5`.\n", "\n", - "Below we compare `MPSxGate` versus `MPSxMPO` with default parameters and `MPSxMPO` with more resource-hungry parameters. The circuit used is the same as in the previous section." + "Both `k` and `optim_delta` can be set via `ConfigMPS`. Below we compare `MPSxGate` versus `MPSxMPO` with default parameters and `MPSxMPO` with more resource-hungry parameters. The circuit used is the same as in the previous section." ] }, { @@ -866,15 +869,16 @@ "output_type": "stream", "text": [ "MPSxGate\n", - "\tTime taken: 1.35 seconds\n", - "\tLower bound of the fidelity: 0.3589\n" + "\tTime taken: 1.89 seconds\n", + "\tLower bound of the fidelity: 0.3712\n" ] } ], "source": [ "start = time()\n", "with CuTensorNetHandle() as libhandle:\n", - " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, chi=16)\n", + " config = ConfigMPS(chi=16)\n", + " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, config)\n", "end = time()\n", "print(\"MPSxGate\")\n", "print(f\"\\tTime taken: {round(end-start,2)} seconds\")\n", @@ -892,15 +896,16 @@ "output_type": "stream", "text": [ "MPSxMPO, default parameters\n", - "\tTime taken: 12.6 seconds\n", - "\tLower bound of the fidelity: 0.3847\n" + "\tTime taken: 27.17 seconds\n", + "\tLower bound of the fidelity: 0.3956\n" ] } ], "source": [ "start = time()\n", "with CuTensorNetHandle() as libhandle:\n", - " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxMPO, chi=16)\n", + " config = ConfigMPS(chi=16)\n", + " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxMPO, config)\n", "end = time()\n", "print(\"MPSxMPO, default parameters\")\n", "print(f\"\\tTime taken: {round(end-start,2)} seconds\")\n", @@ -918,15 +923,16 @@ "output_type": "stream", "text": [ "MPSxMPO, custom parameters\n", - "\tTime taken: 22.52 seconds\n", - "\tLower bound of the fidelity: 0.3977\n" + "\tTime taken: 26.99 seconds\n", + "\tLower bound of the fidelity: 0.4209\n" ] } ], "source": [ "start = time()\n", "with CuTensorNetHandle() as libhandle:\n", - " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxMPO, k=8, optim_delta=1e-15, chi=16)\n", + " config = ConfigMPS(k=8, optim_delta=1e-15, chi=16)\n", + " fixed_fidelity_mps = simulate(libhandle, circuit, ContractionAlg.MPSxMPO, config)\n", "end = time()\n", "print(\"MPSxMPO, custom parameters\")\n", "print(f\"\\tTime taken: {round(end-start,2)} seconds\")\n", @@ -954,7 +960,7 @@ "id": "7607b5bd-f332-4d97-963b-2a163d3fb194", "metadata": {}, "source": [ - "You can request a verbose log to be produced during simulation, by assigning the `loglevel` argument when calling `simulate`. Currently, two log levels are supported (other than default, which is silent): \n", + "You can request a verbose log to be produced during simulation, by assigning the `loglevel` argument when creating a `ConfigMPS` instance. Currently, two log levels are supported (other than default, which is silent): \n", "- `logging.INFO` will print information about progress percent, memory currently occupied by the MPS and current fidelity. Additionally, some high level information of the current stage of the simulation is provided, such as when `MPSxMPO` is applying optimisation sweeps.\n", "- `logging.DEBUG` provides all of the messages from the loglevel above plus detailed information of the current operation being carried out and the values of important variables.\n", "\n", @@ -970,7 +976,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -997,10 +1003,6 @@ "execution_count": 22, "id": "318073fc-2ef4-492e-8c5a-1ba1ba0b7733", "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - }, "tags": [] }, "outputs": [ @@ -1008,1090 +1010,1097 @@ "name": "stderr", "output_type": "stream", "text": [ - "[14:01:12] Simulation (INFO) - Ordering the gates in the circuit to reduce canonicalisation overhead.\n", - "[14:01:12] Simulation (INFO) - Running simulation...\n", - "[14:01:12] Simulation (INFO) - Progress... 0%\n", - "[14:01:12] Simulation (INFO) - Progress... 0%\n", - "[14:01:12] Simulation (INFO) - Progress... 0%\n", - "[14:01:12] Simulation (INFO) - Progress... 0%\n", - "[14:01:12] Simulation (INFO) - Progress... 0%\n", - "[14:01:12] Simulation (INFO) - Progress... 0%\n", - "[14:01:12] Simulation (INFO) - Progress... 1%\n", - "[14:01:12] Simulation (INFO) - Progress... 1%\n", - "[14:01:12] Simulation (INFO) - Progress... 1%\n", - "[14:01:12] Simulation (INFO) - Progress... 1%\n", - "[14:01:12] Simulation (INFO) - Progress... 1%\n", - "[14:01:12] Simulation (INFO) - Progress... 1%\n", - "[14:01:12] Simulation (INFO) - Progress... 2%\n", - "[14:01:12] Simulation (INFO) - Progress... 2%\n", - "[14:01:12] Simulation (INFO) - Progress... 2%\n", - "[14:01:12] Simulation (INFO) - Progress... 2%\n", - "[14:01:12] Simulation (INFO) - Progress... 2%\n", - "[14:01:12] Simulation (INFO) - Progress... 2%\n", - "[14:01:12] Simulation (INFO) - Progress... 3%\n", - "[14:01:12] Simulation (INFO) - Progress... 3%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00067138671875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=1.0\n", - "[14:01:12] Simulation (INFO) - Progress... 3%\n", - "[14:01:12] Simulation (INFO) - Progress... 3%\n", - "[14:01:12] Simulation (INFO) - Progress... 3%\n", - "[14:01:12] Simulation (INFO) - Progress... 3%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00067138671875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344602\n", - "[14:01:12] Simulation (INFO) - Progress... 4%\n", - "[14:01:12] Simulation (INFO) - Progress... 4%\n", - "[14:01:12] Simulation (INFO) - Progress... 4%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.000762939453125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344604\n", - "[14:01:12] Simulation (INFO) - Progress... 4%\n", - "[14:01:12] Simulation (INFO) - Progress... 4%\n", - "[14:01:12] Simulation (INFO) - Progress... 4%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.000762939453125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344602\n", - "[14:01:12] Simulation (INFO) - Progress... 5%\n", - "[14:01:12] Simulation (INFO) - Progress... 5%\n", - "[14:01:12] Simulation (INFO) - Progress... 5%\n", - "[14:01:12] Simulation (INFO) - Progress... 5%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.000823974609375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344602\n", - "[14:01:12] Simulation (INFO) - Progress... 5%\n", - "[14:01:12] Simulation (INFO) - Progress... 5%\n", - "[14:01:12] Simulation (INFO) - Progress... 6%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00091552734375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344602\n", - "[14:01:12] Simulation (INFO) - Progress... 6%\n", - "[14:01:12] Simulation (INFO) - Progress... 6%\n", - "[14:01:12] Simulation (INFO) - Progress... 6%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00103759765625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344602\n", - "[14:01:12] Simulation (INFO) - Progress... 6%\n", - "[14:01:12] Simulation (INFO) - Progress... 6%\n", - "[14:01:12] Simulation (INFO) - Progress... 7%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00128173828125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9990283071344602\n", - "[14:01:12] Simulation (INFO) - Progress... 7%\n", - "[14:01:12] Simulation (INFO) - Progress... 7%\n", - "[14:01:12] Simulation (INFO) - Progress... 7%\n", - "[14:01:12] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:12] MPS (INFO) - Fidelity before optimisation=0.9990283071344602\n", - "[14:01:12] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:12] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9997023479978765\n", - "[14:01:12] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:12] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9997024059075587\n", - "[14:01:12] MPS (INFO) - Final fidelity after optimisation=0.9997024059075587\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00128173828125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 7%\n", - "[14:01:12] Simulation (INFO) - Progress... 7%\n", - "[14:01:12] Simulation (INFO) - Progress... 8%\n", - "[14:01:12] Simulation (INFO) - Progress... 8%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0013427734375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 8%\n", - "[14:01:12] Simulation (INFO) - Progress... 8%\n", - "[14:01:12] Simulation (INFO) - Progress... 8%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00146484375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 8%\n", - "[14:01:12] Simulation (INFO) - Progress... 9%\n", - "[14:01:12] Simulation (INFO) - Progress... 9%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.001708984375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 9%\n", - "[14:01:12] Simulation (INFO) - Progress... 9%\n", - "[14:01:12] Simulation (INFO) - Progress... 9%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0020751953125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 10%\n", - "[14:01:12] Simulation (INFO) - Progress... 10%\n", - "[14:01:12] Simulation (INFO) - Progress... 10%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0025634765625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 10%\n", - "[14:01:12] Simulation (INFO) - Progress... 10%\n", - "[14:01:12] Simulation (INFO) - Progress... 10%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0025634765625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 11%\n", - "[14:01:12] Simulation (INFO) - Progress... 11%\n", - "[14:01:12] Simulation (INFO) - Progress... 11%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0025634765625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 11%\n", - "[14:01:12] Simulation (INFO) - Progress... 11%\n", - "[14:01:12] Simulation (INFO) - Progress... 11%\n", - "[14:01:12] Simulation (INFO) - Progress... 12%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00262451171875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 12%\n", - "[14:01:12] Simulation (INFO) - Progress... 12%\n", - "[14:01:12] Simulation (INFO) - Progress... 12%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00274658203125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 12%\n", - "[14:01:12] Simulation (INFO) - Progress... 12%\n", - "[14:01:12] Simulation (INFO) - Progress... 13%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00299072265625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 13%\n", - "[14:01:12] Simulation (INFO) - Progress... 13%\n", - "[14:01:12] Simulation (INFO) - Progress... 13%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00347900390625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9997024059075589\n", - "[14:01:12] Simulation (INFO) - Progress... 13%\n", - "[14:01:12] Simulation (INFO) - Progress... 13%\n", - "[14:01:12] Simulation (INFO) - Progress... 14%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.00396728515625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9993396700769984\n", - "[14:01:12] Simulation (INFO) - Progress... 14%\n", - "[14:01:12] Simulation (INFO) - Progress... 14%\n", - "[14:01:12] Simulation (INFO) - Progress... 14%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0048828125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9984418366672726\n", - "[14:01:12] Simulation (INFO) - Progress... 14%\n", - "[14:01:12] Simulation (INFO) - Progress... 14%\n", - "[14:01:12] Simulation (INFO) - Progress... 15%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.005889892578125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9978683217610371\n", - "[14:01:12] Simulation (INFO) - Progress... 15%\n", - "[14:01:12] Simulation (INFO) - Progress... 15%\n", - "[14:01:12] Simulation (INFO) - Progress... 15%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.005889892578125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9978683217610371\n", - "[14:01:12] Simulation (INFO) - Progress... 15%\n", - "[14:01:12] Simulation (INFO) - Progress... 15%\n", - "[14:01:12] Simulation (INFO) - Progress... 16%\n", - "[14:01:12] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:12] MPS (INFO) - Fidelity before optimisation=0.9978683217610371\n", - "[14:01:12] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:12] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.99809024854532\n", - "[14:01:12] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:12] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9981132810448355\n", - "[14:01:12] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:12] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9981209535027262\n", - "[14:01:12] MPS (INFO) - Final fidelity after optimisation=0.9981209535027262\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.005889892578125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9981209535027262\n", - "[14:01:12] Simulation (INFO) - Progress... 16%\n", - "[14:01:12] Simulation (INFO) - Progress... 16%\n", - "[14:01:12] Simulation (INFO) - Progress... 16%\n", - "[14:01:12] Simulation (INFO) - Progress... 16%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.005950927734375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9981209535027262\n", - "[14:01:12] Simulation (INFO) - Progress... 16%\n", - "[14:01:12] Simulation (INFO) - Progress... 17%\n", - "[14:01:12] Simulation (INFO) - Progress... 17%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.006072998046875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9981209535027262\n", - "[14:01:12] Simulation (INFO) - Progress... 17%\n", - "[14:01:12] Simulation (INFO) - Progress... 17%\n", - "[14:01:12] Simulation (INFO) - Progress... 17%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.006317138671875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9981209535027262\n", - "[14:01:12] Simulation (INFO) - Progress... 17%\n", - "[14:01:12] Simulation (INFO) - Progress... 18%\n", - "[14:01:12] Simulation (INFO) - Progress... 18%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.006805419921875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9981209535027261\n", - "[14:01:12] Simulation (INFO) - Progress... 18%\n", - "[14:01:12] Simulation (INFO) - Progress... 18%\n", - "[14:01:12] Simulation (INFO) - Progress... 18%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.007049560546875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.997423409781103\n", - "[14:01:12] Simulation (INFO) - Progress... 18%\n", - "[14:01:12] Simulation (INFO) - Progress... 19%\n", - "[14:01:12] Simulation (INFO) - Progress... 19%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.008392333984375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.997423409781103\n", - "[14:01:12] Simulation (INFO) - Progress... 19%\n", - "[14:01:12] Simulation (INFO) - Progress... 19%\n", - "[14:01:12] Simulation (INFO) - Progress... 19%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.009765625\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9969717765474623\n", - "[14:01:12] Simulation (INFO) - Progress... 20%\n", - "[14:01:12] Simulation (INFO) - Progress... 20%\n", - "[14:01:12] Simulation (INFO) - Progress... 20%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.01123046875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.996255622087102\n", - "[14:01:12] Simulation (INFO) - Progress... 20%\n", - "[14:01:12] Simulation (INFO) - Progress... 20%\n", - "[14:01:12] Simulation (INFO) - Progress... 20%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.01165771484375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.996255622087102\n", - "[14:01:12] Simulation (INFO) - Progress... 21%\n", - "[14:01:12] Simulation (INFO) - Progress... 21%\n", - "[14:01:12] Simulation (INFO) - Progress... 21%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.01165771484375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9962556220871019\n", - "[14:01:12] Simulation (INFO) - Progress... 21%\n", - "[14:01:12] Simulation (INFO) - Progress... 21%\n", - "[14:01:12] Simulation (INFO) - Progress... 21%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.01165771484375\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9962556220871019\n", - "[14:01:12] Simulation (INFO) - Progress... 22%\n", - "[14:01:12] Simulation (INFO) - Progress... 22%\n", - "[14:01:12] Simulation (INFO) - Progress... 22%\n", - "[14:01:12] Simulation (INFO) - Progress... 22%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.01171875\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9962556220871019\n", - "[14:01:12] Simulation (INFO) - Progress... 22%\n", - "[14:01:12] Simulation (INFO) - Progress... 22%\n", - "[14:01:12] Simulation (INFO) - Progress... 23%\n", - "[14:01:12] MPS (INFO) - MPS size (MiB)=0.0118408203125\n", - "[14:01:12] MPS (INFO) - MPS fidelity=0.9962556220871019\n", - "[14:01:12] Simulation (INFO) - Progress... 23%\n", - "[14:01:13] Simulation (INFO) - Progress... 23%\n", - "[14:01:13] Simulation (INFO) - Progress... 23%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.0120849609375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9962556220871019\n", - "[14:01:13] Simulation (INFO) - Progress... 23%\n", - "[14:01:13] Simulation (INFO) - Progress... 23%\n", - "[14:01:13] Simulation (INFO) - Progress... 24%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.0125732421875\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9962556220871019\n", - "[14:01:13] Simulation (INFO) - Progress... 24%\n", - "[14:01:13] Simulation (INFO) - Progress... 24%\n", - "[14:01:13] Simulation (INFO) - Progress... 24%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.0130615234375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9955811734143832\n", - "[14:01:13] Simulation (INFO) - Progress... 24%\n", - "[14:01:13] Simulation (INFO) - Progress... 24%\n", - "[14:01:13] Simulation (INFO) - Progress... 25%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.01373291015625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9954580715406015\n", - "[14:01:13] Simulation (INFO) - Progress... 25%\n", - "[14:01:13] Simulation (INFO) - Progress... 25%\n", - "[14:01:13] Simulation (INFO) - Progress... 25%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.0150146484375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9954129745430442\n", - "[14:01:13] Simulation (INFO) - Progress... 25%\n", - "[14:01:13] Simulation (INFO) - Progress... 25%\n", - "[14:01:13] Simulation (INFO) - Progress... 26%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.01708984375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9946104246997917\n", - "[14:01:13] Simulation (INFO) - Progress... 26%\n", - "[14:01:13] Simulation (INFO) - Progress... 26%\n", - "[14:01:13] Simulation (INFO) - Progress... 26%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.0211181640625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.993986081692407\n", - "[14:01:13] Simulation (INFO) - Progress... 26%\n", - "[14:01:13] Simulation (INFO) - Progress... 26%\n", - "[14:01:13] Simulation (INFO) - Progress... 27%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02392578125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9932754206084036\n", - "[14:01:13] Simulation (INFO) - Progress... 27%\n", - "[14:01:13] Simulation (INFO) - Progress... 27%\n", - "[14:01:13] Simulation (INFO) - Progress... 27%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02392578125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9932754206084036\n", - "[14:01:13] Simulation (INFO) - Progress... 27%\n", - "[14:01:13] Simulation (INFO) - Progress... 27%\n", - "[14:01:13] Simulation (INFO) - Progress... 28%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02392578125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9932754206084036\n", - "[14:01:13] Simulation (INFO) - Progress... 28%\n", - "[14:01:13] Simulation (INFO) - Progress... 28%\n", - "[14:01:13] Simulation (INFO) - Progress... 28%\n", - "[14:01:13] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:13] MPS (INFO) - Fidelity before optimisation=0.9932754206084036\n", - "[14:01:13] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:13] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9948146155456611\n", - "[14:01:13] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:13] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9948360895424706\n", - "[14:01:13] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:13] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9948431533380159\n", - "[14:01:13] MPS (INFO) - Final fidelity after optimisation=0.9948431533380159\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02392578125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9948431533380159\n", - "[14:01:13] Simulation (INFO) - Progress... 28%\n", - "[14:01:13] Simulation (INFO) - Progress... 28%\n", - "[14:01:13] Simulation (INFO) - Progress... 29%\n", - "[14:01:13] Simulation (INFO) - Progress... 29%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02398681640625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9948431533380159\n", - "[14:01:13] Simulation (INFO) - Progress... 29%\n", - "[14:01:13] Simulation (INFO) - Progress... 29%\n", - "[14:01:13] Simulation (INFO) - Progress... 29%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02410888671875\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9948431533380157\n", - "[14:01:13] Simulation (INFO) - Progress... 30%\n", - "[14:01:13] Simulation (INFO) - Progress... 30%\n", - "[14:01:13] Simulation (INFO) - Progress... 30%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02435302734375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9948431533380157\n", - "[14:01:13] Simulation (INFO) - Progress... 30%\n", - "[14:01:13] Simulation (INFO) - Progress... 30%\n", - "[14:01:13] Simulation (INFO) - Progress... 30%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02484130859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9948431533380157\n", - "[14:01:13] Simulation (INFO) - Progress... 31%\n", - "[14:01:13] Simulation (INFO) - Progress... 31%\n", - "[14:01:13] Simulation (INFO) - Progress... 31%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02484130859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9948396534426794\n", - "[14:01:13] Simulation (INFO) - Progress... 31%\n", - "[14:01:13] Simulation (INFO) - Progress... 31%\n", - "[14:01:13] Simulation (INFO) - Progress... 31%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.0257568359375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9946407082338863\n", - "[14:01:13] Simulation (INFO) - Progress... 32%\n", - "[14:01:13] Simulation (INFO) - Progress... 32%\n", - "[14:01:13] Simulation (INFO) - Progress... 32%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.026947021484375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9939915775333915\n", - "[14:01:13] Simulation (INFO) - Progress... 32%\n", - "[14:01:13] Simulation (INFO) - Progress... 32%\n", - "[14:01:13] Simulation (INFO) - Progress... 32%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.02850341796875\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9930726984365036\n", - "[14:01:13] Simulation (INFO) - Progress... 33%\n", - "[14:01:13] Simulation (INFO) - Progress... 33%\n", - "[14:01:13] Simulation (INFO) - Progress... 33%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.029144287109375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9925894686689639\n", - "[14:01:13] Simulation (INFO) - Progress... 33%\n", - "[14:01:13] Simulation (INFO) - Progress... 33%\n", - "[14:01:13] Simulation (INFO) - Progress... 33%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.030609130859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9922594965497078\n", - "[14:01:13] Simulation (INFO) - Progress... 34%\n", - "[14:01:13] Simulation (INFO) - Progress... 34%\n", - "[14:01:13] Simulation (INFO) - Progress... 34%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.036590576171875\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161947\n", - "[14:01:13] Simulation (INFO) - Progress... 34%\n", - "[14:01:13] Simulation (INFO) - Progress... 34%\n", - "[14:01:13] Simulation (INFO) - Progress... 34%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038421630859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161949\n", - "[14:01:13] Simulation (INFO) - Progress... 35%\n", - "[14:01:13] Simulation (INFO) - Progress... 35%\n", - "[14:01:13] Simulation (INFO) - Progress... 35%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038421630859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 35%\n", - "[14:01:13] Simulation (INFO) - Progress... 35%\n", - "[14:01:13] Simulation (INFO) - Progress... 35%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038421630859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 36%\n", - "[14:01:13] Simulation (INFO) - Progress... 36%\n", - "[14:01:13] Simulation (INFO) - Progress... 36%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038421630859375\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 36%\n", - "[14:01:13] Simulation (INFO) - Progress... 36%\n", - "[14:01:13] Simulation (INFO) - Progress... 36%\n", - "[14:01:13] Simulation (INFO) - Progress... 37%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038482666015625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 37%\n", - "[14:01:13] Simulation (INFO) - Progress... 37%\n", - "[14:01:13] Simulation (INFO) - Progress... 37%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038604736328125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 37%\n", - "[14:01:13] Simulation (INFO) - Progress... 37%\n", - "[14:01:13] Simulation (INFO) - Progress... 38%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.038848876953125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 38%\n", - "[14:01:13] Simulation (INFO) - Progress... 38%\n", - "[14:01:13] Simulation (INFO) - Progress... 38%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.039337158203125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9917746740161948\n", - "[14:01:13] Simulation (INFO) - Progress... 38%\n", - "[14:01:13] Simulation (INFO) - Progress... 38%\n", - "[14:01:13] Simulation (INFO) - Progress... 39%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.040069580078125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9914013449577964\n", - "[14:01:13] Simulation (INFO) - Progress... 39%\n", - "[14:01:13] Simulation (INFO) - Progress... 39%\n", - "[14:01:13] Simulation (INFO) - Progress... 39%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.04107666015625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9909200464032397\n", - "[14:01:13] Simulation (INFO) - Progress... 39%\n", - "[14:01:13] Simulation (INFO) - Progress... 40%\n", - "[14:01:13] Simulation (INFO) - Progress... 40%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.04278564453125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9909200464032397\n", - "[14:01:13] Simulation (INFO) - Progress... 40%\n", - "[14:01:13] Simulation (INFO) - Progress... 40%\n", - "[14:01:13] Simulation (INFO) - Progress... 40%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.045379638671875\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9904815074905157\n", - "[14:01:13] Simulation (INFO) - Progress... 40%\n", - "[14:01:13] Simulation (INFO) - Progress... 41%\n", - "[14:01:13] Simulation (INFO) - Progress... 41%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.049224853515625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9895385170678038\n", - "[14:01:13] Simulation (INFO) - Progress... 41%\n", - "[14:01:13] Simulation (INFO) - Progress... 41%\n", - "[14:01:13] Simulation (INFO) - Progress... 41%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.054351806640625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9893005128956965\n", - "[14:01:13] Simulation (INFO) - Progress... 41%\n", - "[14:01:13] Simulation (INFO) - Progress... 42%\n", - "[14:01:13] Simulation (INFO) - Progress... 42%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.059844970703125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.98888820372519\n", - "[14:01:13] Simulation (INFO) - Progress... 42%\n", - "[14:01:13] Simulation (INFO) - Progress... 42%\n", - "[14:01:13] Simulation (INFO) - Progress... 42%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.068878173828125\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9879401995661465\n", - "[14:01:13] Simulation (INFO) - Progress... 42%\n", - "[14:01:13] Simulation (INFO) - Progress... 43%\n", - "[14:01:13] Simulation (INFO) - Progress... 43%\n", - "[14:01:13] MPS (INFO) - MPS size (MiB)=0.075836181640625\n", - "[14:01:13] MPS (INFO) - MPS fidelity=0.9870682591461779\n", - "[14:01:13] Simulation (INFO) - Progress... 43%\n", - "[14:01:13] Simulation (INFO) - Progress... 43%\n", - "[14:01:13] Simulation (INFO) - Progress... 43%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.075836181640625\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9870682591461779\n", - "[14:01:14] Simulation (INFO) - Progress... 43%\n", - "[14:01:14] Simulation (INFO) - Progress... 44%\n", - "[14:01:14] Simulation (INFO) - Progress... 44%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.075836181640625\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9870682591461779\n", - "[14:01:14] Simulation (INFO) - Progress... 44%\n", - "[14:01:14] Simulation (INFO) - Progress... 44%\n", - "[14:01:14] Simulation (INFO) - Progress... 44%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.075836181640625\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9870682591461779\n", - "[14:01:14] Simulation (INFO) - Progress... 44%\n", - "[14:01:14] Simulation (INFO) - Progress... 45%\n", - "[14:01:14] Simulation (INFO) - Progress... 45%\n", - "[14:01:14] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:14] MPS (INFO) - Fidelity before optimisation=0.9870682591461779\n", - "[14:01:14] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:14] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9885243877420532\n", - "[14:01:14] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:14] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9885675777883345\n", - "[14:01:14] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:14] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9885807735732146\n", - "[14:01:14] MPS (INFO) - Final fidelity after optimisation=0.9885807735732146\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.075836181640625\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732146\n", - "[14:01:14] Simulation (INFO) - Progress... 45%\n", - "[14:01:14] Simulation (INFO) - Progress... 45%\n", - "[14:01:14] Simulation (INFO) - Progress... 45%\n", - "[14:01:14] Simulation (INFO) - Progress... 45%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.075897216796875\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732146\n", - "[14:01:14] Simulation (INFO) - Progress... 46%\n", - "[14:01:14] Simulation (INFO) - Progress... 46%\n", - "[14:01:14] Simulation (INFO) - Progress... 46%\n", - "[14:01:14] Simulation (INFO) - Progress... 46%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.076019287109375\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732146\n", - "[14:01:14] Simulation (INFO) - Progress... 46%\n", - "[14:01:14] Simulation (INFO) - Progress... 46%\n", - "[14:01:14] Simulation (INFO) - Progress... 47%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.076019287109375\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732146\n", - "[14:01:14] Simulation (INFO) - Progress... 47%\n", - "[14:01:14] Simulation (INFO) - Progress... 47%\n", - "[14:01:14] Simulation (INFO) - Progress... 47%\n", - "[14:01:14] Simulation (INFO) - Progress... 47%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.076263427734375\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732146\n", - "[14:01:14] Simulation (INFO) - Progress... 47%\n", - "[14:01:14] Simulation (INFO) - Progress... 48%\n", - "[14:01:14] Simulation (INFO) - Progress... 48%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.076629638671875\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732145\n", - "[14:01:14] Simulation (INFO) - Progress... 48%\n", - "[14:01:14] Simulation (INFO) - Progress... 48%\n", - "[14:01:14] Simulation (INFO) - Progress... 48%\n", - "[14:01:14] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:14] MPS (INFO) - Fidelity before optimisation=0.9885807735732145\n", - "[14:01:14] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:14] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9885807735732146\n", - "[14:01:14] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:14] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9885807735732127\n", - "[14:01:14] MPS (INFO) - Final fidelity after optimisation=0.9885807735732127\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.076629638671875\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732127\n", - "[14:01:14] Simulation (INFO) - Progress... 48%\n", - "[14:01:14] Simulation (INFO) - Progress... 49%\n", - "[14:01:14] Simulation (INFO) - Progress... 49%\n", - "[14:01:14] Simulation (INFO) - Progress... 49%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.077117919921875\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885807735732127\n", - "[14:01:14] Simulation (INFO) - Progress... 49%\n", - "[14:01:14] Simulation (INFO) - Progress... 49%\n", - "[14:01:14] Simulation (INFO) - Progress... 50%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.077117919921875\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9885437435962636\n", - "[14:01:14] Simulation (INFO) - Progress... 50%\n", - "[14:01:14] Simulation (INFO) - Progress... 50%\n", - "[14:01:14] Simulation (INFO) - Progress... 50%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.077850341796875\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9876299149488592\n", - "[14:01:14] Simulation (INFO) - Progress... 50%\n", - "[14:01:14] Simulation (INFO) - Progress... 50%\n", - "[14:01:14] Simulation (INFO) - Progress... 51%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.079193115234375\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9876299149488592\n", - "[14:01:14] Simulation (INFO) - Progress... 51%\n", - "[14:01:14] Simulation (INFO) - Progress... 51%\n", - "[14:01:14] Simulation (INFO) - Progress... 51%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.080902099609375\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9876299149488592\n", - "[14:01:14] Simulation (INFO) - Progress... 51%\n", - "[14:01:14] Simulation (INFO) - Progress... 51%\n", - "[14:01:14] Simulation (INFO) - Progress... 52%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.083343505859375\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9872256262985958\n", - "[14:01:14] Simulation (INFO) - Progress... 52%\n", - "[14:01:14] Simulation (INFO) - Progress... 52%\n", - "[14:01:14] Simulation (INFO) - Progress... 52%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.08380126953125\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9867042570373467\n", - "[14:01:14] Simulation (INFO) - Progress... 52%\n", - "[14:01:14] Simulation (INFO) - Progress... 52%\n", - "[14:01:14] Simulation (INFO) - Progress... 53%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.08624267578125\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9860074263824546\n", - "[14:01:14] Simulation (INFO) - Progress... 53%\n", - "[14:01:14] Simulation (INFO) - Progress... 53%\n", - "[14:01:14] Simulation (INFO) - Progress... 53%\n", - "[14:01:14] MPS (INFO) - MPS size (MiB)=0.08868408203125\n", - "[14:01:14] MPS (INFO) - MPS fidelity=0.9857877466399374\n", - "[14:01:14] Simulation (INFO) - Progress... 53%\n", - "[14:01:14] Simulation (INFO) - Progress... 53%\n", - "[14:01:14] Simulation (INFO) - Progress... 54%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.09307861328125\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9853289590697893\n", - "[14:01:15] Simulation (INFO) - Progress... 54%\n", - "[14:01:15] Simulation (INFO) - Progress... 54%\n", - "[14:01:15] Simulation (INFO) - Progress... 54%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.09674072265625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9847593868171541\n", - "[14:01:15] Simulation (INFO) - Progress... 54%\n", - "[14:01:15] Simulation (INFO) - Progress... 54%\n", - "[14:01:15] Simulation (INFO) - Progress... 55%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.10498046875\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9839376637463282\n", - "[14:01:15] Simulation (INFO) - Progress... 55%\n", - "[14:01:15] Simulation (INFO) - Progress... 55%\n", - "[14:01:15] Simulation (INFO) - Progress... 55%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.110107421875\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.983070631353325\n", - "[14:01:15] Simulation (INFO) - Progress... 55%\n", - "[14:01:15] Simulation (INFO) - Progress... 55%\n", - "[14:01:15] Simulation (INFO) - Progress... 56%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.12353515625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9820965437215268\n", - "[14:01:15] Simulation (INFO) - Progress... 56%\n", - "[14:01:15] Simulation (INFO) - Progress... 56%\n", - "[14:01:15] Simulation (INFO) - Progress... 56%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.13287353515625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9813700217282061\n", - "[14:01:15] Simulation (INFO) - Progress... 56%\n", - "[14:01:15] Simulation (INFO) - Progress... 56%\n", - "[14:01:15] Simulation (INFO) - Progress... 57%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.15484619140625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9806263554164852\n", - "[14:01:15] Simulation (INFO) - Progress... 57%\n", - "[14:01:15] Simulation (INFO) - Progress... 57%\n", - "[14:01:15] Simulation (INFO) - Progress... 57%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.16436767578125\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9796957281177572\n", - "[14:01:15] Simulation (INFO) - Progress... 57%\n", - "[14:01:15] Simulation (INFO) - Progress... 57%\n", - "[14:01:15] Simulation (INFO) - Progress... 58%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.190460205078125\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9787753802493907\n", - "[14:01:15] Simulation (INFO) - Progress... 58%\n", - "[14:01:15] Simulation (INFO) - Progress... 58%\n", - "[14:01:15] Simulation (INFO) - Progress... 58%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.204498291015625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9779191475648064\n", - "[14:01:15] Simulation (INFO) - Progress... 58%\n", - "[14:01:15] Simulation (INFO) - Progress... 58%\n", - "[14:01:15] Simulation (INFO) - Progress... 59%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.227935791015625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9770858154529012\n", - "[14:01:15] Simulation (INFO) - Progress... 59%\n", - "[14:01:15] Simulation (INFO) - Progress... 59%\n", - "[14:01:15] Simulation (INFO) - Progress... 59%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.250579833984375\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9763732931498061\n", - "[14:01:15] Simulation (INFO) - Progress... 59%\n", - "[14:01:15] Simulation (INFO) - Progress... 60%\n", - "[14:01:15] Simulation (INFO) - Progress... 60%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.298919677734375\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.975569858851943\n", - "[14:01:15] Simulation (INFO) - Progress... 60%\n", - "[14:01:15] Simulation (INFO) - Progress... 60%\n", - "[14:01:15] Simulation (INFO) - Progress... 60%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.302093505859375\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.97482766334186\n", - "[14:01:15] Simulation (INFO) - Progress... 60%\n", - "[14:01:15] Simulation (INFO) - Progress... 61%\n", - "[14:01:15] Simulation (INFO) - Progress... 61%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.334991455078125\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 61%\n", - "[14:01:15] Simulation (INFO) - Progress... 61%\n", - "[14:01:15] Simulation (INFO) - Progress... 61%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.334991455078125\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 61%\n", - "[14:01:15] Simulation (INFO) - Progress... 62%\n", - "[14:01:15] Simulation (INFO) - Progress... 62%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 62%\n", - "[14:01:15] Simulation (INFO) - Progress... 62%\n", - "[14:01:15] Simulation (INFO) - Progress... 62%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 62%\n", - "[14:01:15] Simulation (INFO) - Progress... 63%\n", - "[14:01:15] Simulation (INFO) - Progress... 63%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 63%\n", - "[14:01:15] Simulation (INFO) - Progress... 63%\n", - "[14:01:15] Simulation (INFO) - Progress... 63%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 63%\n", - "[14:01:15] Simulation (INFO) - Progress... 64%\n", - "[14:01:15] Simulation (INFO) - Progress... 64%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892826\n", - "[14:01:15] Simulation (INFO) - Progress... 64%\n", - "[14:01:15] Simulation (INFO) - Progress... 64%\n", - "[14:01:15] Simulation (INFO) - Progress... 64%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 64%\n", - "[14:01:15] Simulation (INFO) - Progress... 65%\n", - "[14:01:15] Simulation (INFO) - Progress... 65%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 65%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.339019775390625\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9740459735892828\n", - "[14:01:15] Simulation (INFO) - Progress... 65%\n", - "[14:01:15] Simulation (INFO) - Progress... 65%\n", - "[14:01:15] Simulation (INFO) - Progress... 65%\n", - "[14:01:15] MPS (INFO) - MPS size (MiB)=0.340118408203125\n", - "[14:01:15] MPS (INFO) - MPS fidelity=0.9735596675843919\n", - "[14:01:15] Simulation (INFO) - Progress... 66%\n", - "[14:01:15] Simulation (INFO) - Progress... 66%\n", - "[14:01:15] Simulation (INFO) - Progress... 66%\n", - "[14:01:15] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:15] MPS (INFO) - Fidelity before optimisation=0.9735596675843919\n", - "[14:01:15] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:15] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9843516935412071\n", - "[14:01:15] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:15] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9848064428508081\n", - "[14:01:15] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:16] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9849304313856563\n", - "[14:01:16] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:16] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9849873035247502\n", - "[14:01:16] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:16] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9850185604266666\n", - "[14:01:16] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:16] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9850377284486574\n", - "[14:01:16] MPS (INFO) - Final fidelity after optimisation=0.9850377284486574\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.3406982421875\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9844304521445316\n", - "[14:01:16] Simulation (INFO) - Progress... 66%\n", - "[14:01:16] Simulation (INFO) - Progress... 66%\n", - "[14:01:16] Simulation (INFO) - Progress... 66%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.341339111328125\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9836453925132829\n", - "[14:01:16] Simulation (INFO) - Progress... 67%\n", - "[14:01:16] Simulation (INFO) - Progress... 67%\n", - "[14:01:16] Simulation (INFO) - Progress... 67%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.344635009765625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9827521125621543\n", - "[14:01:16] Simulation (INFO) - Progress... 67%\n", - "[14:01:16] Simulation (INFO) - Progress... 67%\n", - "[14:01:16] Simulation (INFO) - Progress... 67%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.352752685546875\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9819763508005264\n", - "[14:01:16] Simulation (INFO) - Progress... 68%\n", - "[14:01:16] Simulation (INFO) - Progress... 68%\n", - "[14:01:16] Simulation (INFO) - Progress... 68%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.366485595703125\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9810077310496189\n", - "[14:01:16] Simulation (INFO) - Progress... 68%\n", - "[14:01:16] Simulation (INFO) - Progress... 68%\n", - "[14:01:16] Simulation (INFO) - Progress... 68%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.394256591796875\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9802244249339466\n", - "[14:01:16] Simulation (INFO) - Progress... 69%\n", - "[14:01:16] Simulation (INFO) - Progress... 69%\n", - "[14:01:16] Simulation (INFO) - Progress... 69%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.4154052734375\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9793217534714646\n", - "[14:01:16] Simulation (INFO) - Progress... 69%\n", - "[14:01:16] Simulation (INFO) - Progress... 69%\n", - "[14:01:16] Simulation (INFO) - Progress... 70%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.4249267578125\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9783526934928921\n", - "[14:01:16] Simulation (INFO) - Progress... 70%\n", - "[14:01:16] Simulation (INFO) - Progress... 70%\n", - "[14:01:16] Simulation (INFO) - Progress... 70%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.4468994140625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9773801381930487\n", - "[14:01:16] Simulation (INFO) - Progress... 70%\n", - "[14:01:16] Simulation (INFO) - Progress... 70%\n", - "[14:01:16] Simulation (INFO) - Progress... 71%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.49566650390625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9764511340458201\n", - "[14:01:16] Simulation (INFO) - Progress... 71%\n", - "[14:01:16] Simulation (INFO) - Progress... 71%\n", - "[14:01:16] Simulation (INFO) - Progress... 71%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.51324462890625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:16] Simulation (INFO) - Progress... 71%\n", - "[14:01:16] Simulation (INFO) - Progress... 71%\n", - "[14:01:16] Simulation (INFO) - Progress... 72%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.51324462890625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:16] Simulation (INFO) - Progress... 72%\n", - "[14:01:16] Simulation (INFO) - Progress... 72%\n", - "[14:01:16] Simulation (INFO) - Progress... 72%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.51324462890625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:16] Simulation (INFO) - Progress... 72%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.51324462890625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:16] Simulation (INFO) - Progress... 72%\n", - "[14:01:16] Simulation (INFO) - Progress... 73%\n", - "[14:01:16] Simulation (INFO) - Progress... 73%\n", - "[14:01:16] Simulation (INFO) - Progress... 73%\n", - "[14:01:16] MPS (INFO) - MPS size (MiB)=0.51324462890625\n", - "[14:01:16] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:16] Simulation (INFO) - Progress... 73%\n", - "[14:01:17] Simulation (INFO) - Progress... 73%\n", - "[14:01:17] Simulation (INFO) - Progress... 73%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.51324462890625\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:17] Simulation (INFO) - Progress... 74%\n", - "[14:01:17] Simulation (INFO) - Progress... 74%\n", - "[14:01:17] Simulation (INFO) - Progress... 74%\n", - "[14:01:17] Simulation (INFO) - Progress... 74%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.513641357421875\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:17] Simulation (INFO) - Progress... 74%\n", - "[14:01:17] Simulation (INFO) - Progress... 74%\n", - "[14:01:17] Simulation (INFO) - Progress... 75%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.513641357421875\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9756161361580449\n", - "[14:01:17] Simulation (INFO) - Progress... 75%\n", - "[14:01:17] Simulation (INFO) - Progress... 75%\n", - "[14:01:17] Simulation (INFO) - Progress... 75%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.51556396484375\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9748529131568249\n", - "[14:01:17] Simulation (INFO) - Progress... 75%\n", - "[14:01:17] Simulation (INFO) - Progress... 75%\n", - "[14:01:17] Simulation (INFO) - Progress... 76%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.51556396484375\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9748529131568249\n", - "[14:01:17] Simulation (INFO) - Progress... 76%\n", - "[14:01:17] Simulation (INFO) - Progress... 76%\n", - "[14:01:17] Simulation (INFO) - Progress... 76%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.51983642578125\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9742120807068472\n", - "[14:01:17] Simulation (INFO) - Progress... 76%\n", - "[14:01:17] Simulation (INFO) - Progress... 76%\n", - "[14:01:17] Simulation (INFO) - Progress... 77%\n", - "[14:01:17] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:17] MPS (INFO) - Fidelity before optimisation=0.9742120807068472\n", - "[14:01:17] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:17] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.975134847725609\n", - "[14:01:17] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:17] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9751851737337295\n", - "[14:01:17] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:17] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9752028508364771\n", - "[14:01:17] MPS (INFO) - Final fidelity after optimisation=0.9752028508364771\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.522216796875\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9747413039963226\n", - "[14:01:17] Simulation (INFO) - Progress... 77%\n", - "[14:01:17] Simulation (INFO) - Progress... 77%\n", - "[14:01:17] Simulation (INFO) - Progress... 77%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.530548095703125\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9737709267327275\n", - "[14:01:17] Simulation (INFO) - Progress... 77%\n", - "[14:01:17] Simulation (INFO) - Progress... 77%\n", - "[14:01:17] Simulation (INFO) - Progress... 78%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.542144775390625\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9730980087583336\n", - "[14:01:17] Simulation (INFO) - Progress... 78%\n", - "[14:01:17] Simulation (INFO) - Progress... 78%\n", - "[14:01:17] Simulation (INFO) - Progress... 78%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.555572509765625\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.972274693739747\n", - "[14:01:17] Simulation (INFO) - Progress... 78%\n", - "[14:01:17] Simulation (INFO) - Progress... 78%\n", - "[14:01:17] Simulation (INFO) - Progress... 79%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.58514404296875\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9714008152517145\n", - "[14:01:17] Simulation (INFO) - Progress... 79%\n", - "[14:01:17] Simulation (INFO) - Progress... 79%\n", - "[14:01:17] Simulation (INFO) - Progress... 79%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.5892333984375\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9705196501761234\n", - "[14:01:17] Simulation (INFO) - Progress... 79%\n", - "[14:01:17] Simulation (INFO) - Progress... 80%\n", - "[14:01:17] Simulation (INFO) - Progress... 80%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.63214111328125\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9697148601428947\n", - "[14:01:17] Simulation (INFO) - Progress... 80%\n", - "[14:01:17] Simulation (INFO) - Progress... 80%\n", - "[14:01:17] Simulation (INFO) - Progress... 80%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.65301513671875\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9688374595301655\n", - "[14:01:17] Simulation (INFO) - Progress... 80%\n", - "[14:01:17] Simulation (INFO) - Progress... 81%\n", - "[14:01:17] Simulation (INFO) - Progress... 81%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.731292724609375\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9679729595082353\n", - "[14:01:17] Simulation (INFO) - Progress... 81%\n", - "[14:01:17] Simulation (INFO) - Progress... 81%\n", - "[14:01:17] Simulation (INFO) - Progress... 81%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.756011962890625\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9670817720186894\n", - "[14:01:17] Simulation (INFO) - Progress... 81%\n", - "[14:01:17] Simulation (INFO) - Progress... 82%\n", - "[14:01:17] Simulation (INFO) - Progress... 82%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.851715087890625\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.9662304487130915\n", - "[14:01:17] Simulation (INFO) - Progress... 82%\n", - "[14:01:17] Simulation (INFO) - Progress... 82%\n", - "[14:01:17] Simulation (INFO) - Progress... 82%\n", - "[14:01:17] MPS (INFO) - MPS size (MiB)=0.903900146484375\n", - "[14:01:17] MPS (INFO) - MPS fidelity=0.96530121346801\n", - "[14:01:17] Simulation (INFO) - Progress... 82%\n", - "[14:01:17] Simulation (INFO) - Progress... 83%\n", - "[14:01:17] Simulation (INFO) - Progress... 83%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.074066162109375\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9644645141858508\n", - "[14:01:18] Simulation (INFO) - Progress... 83%\n", - "[14:01:18] Simulation (INFO) - Progress... 83%\n", - "[14:01:18] Simulation (INFO) - Progress... 83%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.13128662109375\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.963576178040663\n", - "[14:01:18] Simulation (INFO) - Progress... 83%\n", - "[14:01:18] Simulation (INFO) - Progress... 84%\n", - "[14:01:18] Simulation (INFO) - Progress... 84%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.375518798828125\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9627241232539026\n", - "[14:01:18] Simulation (INFO) - Progress... 84%\n", - "[14:01:18] Simulation (INFO) - Progress... 84%\n", - "[14:01:18] Simulation (INFO) - Progress... 84%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.4351806640625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9617990818895198\n", - "[14:01:18] Simulation (INFO) - Progress... 84%\n", - "[14:01:18] Simulation (INFO) - Progress... 85%\n", - "[14:01:18] Simulation (INFO) - Progress... 85%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.738677978515625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9610190784537106\n", - "[14:01:18] Simulation (INFO) - Progress... 85%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75592041015625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 85%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75592041015625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 85%\n", - "[14:01:18] Simulation (INFO) - Progress... 85%\n", - "[14:01:18] Simulation (INFO) - Progress... 86%\n", - "[14:01:18] Simulation (INFO) - Progress... 86%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75592041015625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877096\n", - "[14:01:18] Simulation (INFO) - Progress... 86%\n", - "[14:01:18] Simulation (INFO) - Progress... 86%\n", - "[14:01:18] Simulation (INFO) - Progress... 86%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75592041015625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 86%\n", - "[14:01:18] Simulation (INFO) - Progress... 87%\n", - "[14:01:18] Simulation (INFO) - Progress... 87%\n", - "[14:01:18] Simulation (INFO) - Progress... 87%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75592041015625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 87%\n", - "[14:01:18] Simulation (INFO) - Progress... 87%\n", - "[14:01:18] Simulation (INFO) - Progress... 87%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75592041015625\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 88%\n", - "[14:01:18] Simulation (INFO) - Progress... 88%\n", - "[14:01:18] Simulation (INFO) - Progress... 88%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75701904296875\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 88%\n", - "[14:01:18] Simulation (INFO) - Progress... 88%\n", - "[14:01:18] Simulation (INFO) - Progress... 88%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75701904296875\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9602283439877098\n", - "[14:01:18] Simulation (INFO) - Progress... 89%\n", - "[14:01:18] Simulation (INFO) - Progress... 89%\n", - "[14:01:18] Simulation (INFO) - Progress... 89%\n", - "[14:01:18] MPS (INFO) - MPS size (MiB)=1.75872802734375\n", - "[14:01:18] MPS (INFO) - MPS fidelity=0.9596341716247032\n", - "[14:01:18] Simulation (INFO) - Progress... 89%\n", - "[14:01:18] Simulation (INFO) - Progress... 89%\n", - "[14:01:18] Simulation (INFO) - Progress... 90%\n", - "[14:01:18] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:18] MPS (INFO) - Fidelity before optimisation=0.9596341716247032\n", - "[14:01:18] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:18] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9700420977488123\n", - "[14:01:18] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:18] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9703519467112257\n", - "[14:01:18] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:18] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9704374405302711\n", - "[14:01:18] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:19] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9704739545165699\n", - "[14:01:19] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:19] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9704925687713485\n", - "[14:01:19] MPS (INFO) - Final fidelity after optimisation=0.9704925687713485\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.75872802734375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9704925687713485\n", - "[14:01:19] Simulation (INFO) - Progress... 90%\n", - "[14:01:19] Simulation (INFO) - Progress... 90%\n", - "[14:01:19] Simulation (INFO) - Progress... 90%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.765777587890625\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9696216444258031\n", - "[14:01:19] Simulation (INFO) - Progress... 90%\n", - "[14:01:19] Simulation (INFO) - Progress... 90%\n", - "[14:01:19] Simulation (INFO) - Progress... 91%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.77117919921875\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9696216444258033\n", - "[14:01:19] Simulation (INFO) - Progress... 91%\n", - "[14:01:19] Simulation (INFO) - Progress... 91%\n", - "[14:01:19] Simulation (INFO) - Progress... 91%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.79656982421875\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9687315620521755\n", - "[14:01:19] Simulation (INFO) - Progress... 91%\n", - "[14:01:19] Simulation (INFO) - Progress... 91%\n", - "[14:01:19] Simulation (INFO) - Progress... 92%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.84222412109375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9679596222596152\n", - "[14:01:19] Simulation (INFO) - Progress... 92%\n", - "[14:01:19] Simulation (INFO) - Progress... 92%\n", - "[14:01:19] Simulation (INFO) - Progress... 92%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.870208740234375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9670763677407406\n", - "[14:01:19] Simulation (INFO) - Progress... 92%\n", - "[14:01:19] Simulation (INFO) - Progress... 92%\n", - "[14:01:19] Simulation (INFO) - Progress... 93%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.940521240234375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9661194670712572\n", - "[14:01:19] Simulation (INFO) - Progress... 93%\n", - "[14:01:19] Simulation (INFO) - Progress... 93%\n", - "[14:01:19] Simulation (INFO) - Progress... 93%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=1.999114990234375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9652231632846195\n", - "[14:01:19] Simulation (INFO) - Progress... 93%\n", - "[14:01:19] Simulation (INFO) - Progress... 93%\n", - "[14:01:19] Simulation (INFO) - Progress... 94%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.234954833984375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9642981707017143\n", - "[14:01:19] Simulation (INFO) - Progress... 94%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9633776196448067\n", - "[14:01:19] Simulation (INFO) - Progress... 94%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9633776196448067\n", - "[14:01:19] Simulation (INFO) - Progress... 94%\n", - "[14:01:19] Simulation (INFO) - Progress... 94%\n", - "[14:01:19] Simulation (INFO) - Progress... 94%\n", - "[14:01:19] Simulation (INFO) - Progress... 95%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9633776196448067\n", - "[14:01:19] Simulation (INFO) - Progress... 95%\n", - "[14:01:19] Simulation (INFO) - Progress... 95%\n", - "[14:01:19] Simulation (INFO) - Progress... 95%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9633776196448067\n", - "[14:01:19] Simulation (INFO) - Progress... 95%\n", - "[14:01:19] Simulation (INFO) - Progress... 95%\n", - "[14:01:19] Simulation (INFO) - Progress... 96%\n", - "[14:01:19] Simulation (INFO) - Progress... 96%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9633776196448067\n", - "[14:01:19] Simulation (INFO) - Progress... 96%\n", - "[14:01:19] Simulation (INFO) - Progress... 96%\n", - "[14:01:19] Simulation (INFO) - Progress... 96%\n", - "[14:01:19] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:19] MPS (INFO) - MPS fidelity=0.9633776196448067\n", - "[14:01:19] Simulation (INFO) - Progress... 96%\n", - "[14:01:19] Simulation (INFO) - Progress... 97%\n", - "[14:01:19] Simulation (INFO) - Progress... 97%\n", - "[14:01:19] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:19] MPS (INFO) - Fidelity before optimisation=0.9633776196448067\n", - "[14:01:19] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:20] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.967414171617126\n", - "[14:01:20] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:20] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.967533278009993\n", - "[14:01:20] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:20] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9675675092087742\n", - "[14:01:20] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:20] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9675846146681976\n", - "[14:01:20] MPS (INFO) - Final fidelity after optimisation=0.9675846146681976\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9675846146681976\n", - "[14:01:20] Simulation (INFO) - Progress... 97%\n", - "[14:01:20] Simulation (INFO) - Progress... 97%\n", - "[14:01:20] Simulation (INFO) - Progress... 97%\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9675846146681976\n", - "[14:01:20] Simulation (INFO) - Progress... 97%\n", - "[14:01:20] Simulation (INFO) - Progress... 98%\n", - "[14:01:20] Simulation (INFO) - Progress... 98%\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.35150146484375\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9675846146681976\n", - "[14:01:20] Simulation (INFO) - Progress... 98%\n", - "[14:01:20] Simulation (INFO) - Progress... 98%\n", - "[14:01:20] Simulation (INFO) - Progress... 98%\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.34918212890625\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9667630952362768\n", - "[14:01:20] Simulation (INFO) - Progress... 98%\n", - "[14:01:20] Simulation (INFO) - Progress... 99%\n", - "[14:01:20] Simulation (INFO) - Progress... 99%\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.34918212890625\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9667630952362768\n", - "[14:01:20] Simulation (INFO) - Progress... 99%\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.3427734375\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9659837340863052\n", - "[14:01:20] Simulation (INFO) - Progress... 99%\n", - "[14:01:20] MPS (INFO) - MPS size (MiB)=2.3427734375\n", - "[14:01:20] MPS (INFO) - MPS fidelity=0.9659837340863054\n", - "[14:01:20] Simulation (INFO) - Progress... 99%\n", - "[14:01:20] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:20] MPS (INFO) - Fidelity before optimisation=0.9659837340863054\n", - "[14:01:20] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:20] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9659853689734507\n", - "[14:01:20] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:20] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9659862268998962\n", - "[14:01:20] MPS (INFO) - Final fidelity after optimisation=0.9659862268998962\n", - "[14:01:20] MPS (INFO) - Applying variational optimisation.\n", - "[14:01:20] MPS (INFO) - Fidelity before optimisation=0.9659862268998962\n", - "[14:01:20] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:21] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.965986226899895\n", - "[14:01:21] MPS (INFO) - Doing another optimisation sweep...\n", - "[14:01:21] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9659862268998954\n", - "[14:01:21] MPS (INFO) - Final fidelity after optimisation=0.9659862268998954\n", - "[14:01:21] Simulation (INFO) - Simulation completed.\n", - "[14:01:21] Simulation (INFO) - Final MPS size=2.3427734375 MiB\n", - "[14:01:21] Simulation (INFO) - Final MPS fidelity=0.9659862268998954\n" + "[15:41:45] Simulation (INFO) - Ordering the gates in the circuit to reduce canonicalisation overhead.\n", + "[15:41:45] Simulation (INFO) - Running simulation...\n", + "[15:41:45] Simulation (INFO) - Progress... 0%\n", + "[15:41:45] Simulation (INFO) - Progress... 0%\n", + "[15:41:45] Simulation (INFO) - Progress... 0%\n", + "[15:41:45] Simulation (INFO) - Progress... 0%\n", + "[15:41:45] Simulation (INFO) - Progress... 0%\n", + "[15:41:45] Simulation (INFO) - Progress... 0%\n", + "[15:41:45] Simulation (INFO) - Progress... 1%\n", + "[15:41:45] Simulation (INFO) - Progress... 1%\n", + "[15:41:45] Simulation (INFO) - Progress... 1%\n", + "[15:41:45] Simulation (INFO) - Progress... 1%\n", + "[15:41:45] Simulation (INFO) - Progress... 1%\n", + "[15:41:45] Simulation (INFO) - Progress... 1%\n", + "[15:41:45] Simulation (INFO) - Progress... 2%\n", + "[15:41:45] Simulation (INFO) - Progress... 2%\n", + "[15:41:45] Simulation (INFO) - Progress... 2%\n", + "[15:41:45] Simulation (INFO) - Progress... 2%\n", + "[15:41:45] Simulation (INFO) - Progress... 2%\n", + "[15:41:45] Simulation (INFO) - Progress... 2%\n", + "[15:41:45] Simulation (INFO) - Progress... 3%\n", + "[15:41:45] Simulation (INFO) - Progress... 3%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.00067138671875\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0\n", + "[15:41:45] Simulation (INFO) - Progress... 3%\n", + "[15:41:45] Simulation (INFO) - Progress... 3%\n", + "[15:41:45] Simulation (INFO) - Progress... 3%\n", + "[15:41:45] Simulation (INFO) - Progress... 3%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.000732421875\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0\n", + "[15:41:45] Simulation (INFO) - Progress... 4%\n", + "[15:41:45] Simulation (INFO) - Progress... 4%\n", + "[15:41:45] Simulation (INFO) - Progress... 4%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.0008544921875\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0\n", + "[15:41:45] Simulation (INFO) - Progress... 4%\n", + "[15:41:45] Simulation (INFO) - Progress... 4%\n", + "[15:41:45] Simulation (INFO) - Progress... 4%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.0008544921875\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0\n", + "[15:41:45] Simulation (INFO) - Progress... 5%\n", + "[15:41:45] Simulation (INFO) - Progress... 5%\n", + "[15:41:45] Simulation (INFO) - Progress... 5%\n", + "[15:41:45] Simulation (INFO) - Progress... 5%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.00091552734375\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0\n", + "[15:41:45] Simulation (INFO) - Progress... 5%\n", + "[15:41:45] Simulation (INFO) - Progress... 5%\n", + "[15:41:45] Simulation (INFO) - Progress... 6%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.00103759765625\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0\n", + "[15:41:45] Simulation (INFO) - Progress... 6%\n", + "[15:41:45] Simulation (INFO) - Progress... 6%\n", + "[15:41:45] Simulation (INFO) - Progress... 6%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.00128173828125\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0000000000000002\n", + "[15:41:45] Simulation (INFO) - Progress... 6%\n", + "[15:41:45] Simulation (INFO) - Progress... 6%\n", + "[15:41:45] Simulation (INFO) - Progress... 7%\n", + "[15:41:45] MPS (INFO) - MPS size (MiB)=0.00164794921875\n", + "[15:41:45] MPS (INFO) - MPS fidelity=1.0000000000000002\n", + "[15:41:45] Simulation (INFO) - Progress... 7%\n", + "[15:41:45] Simulation (INFO) - Progress... 7%\n", + "[15:41:45] Simulation (INFO) - Progress... 7%\n", + "[15:41:45] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:45] MPS (INFO) - Fidelity before optimisation=1.0000000000000002\n", + "[15:41:45] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:45] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.999999999999996\n", + "[15:41:45] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:46] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9999999999999964\n", + "[15:41:46] MPS (INFO) - Final fidelity after optimisation=0.9999999999999964\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00164794921875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9999999999999964\n", + "[15:41:46] Simulation (INFO) - Progress... 7%\n", + "[15:41:46] Simulation (INFO) - Progress... 7%\n", + "[15:41:46] Simulation (INFO) - Progress... 8%\n", + "[15:41:46] Simulation (INFO) - Progress... 8%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.001708984375\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9999999999999964\n", + "[15:41:46] Simulation (INFO) - Progress... 8%\n", + "[15:41:46] Simulation (INFO) - Progress... 8%\n", + "[15:41:46] Simulation (INFO) - Progress... 8%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0018310546875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9999999999999964\n", + "[15:41:46] Simulation (INFO) - Progress... 8%\n", + "[15:41:46] Simulation (INFO) - Progress... 9%\n", + "[15:41:46] Simulation (INFO) - Progress... 9%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0020751953125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9999999999999962\n", + "[15:41:46] Simulation (INFO) - Progress... 9%\n", + "[15:41:46] Simulation (INFO) - Progress... 9%\n", + "[15:41:46] Simulation (INFO) - Progress... 9%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0025634765625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9999999999999962\n", + "[15:41:46] Simulation (INFO) - Progress... 10%\n", + "[15:41:46] Simulation (INFO) - Progress... 10%\n", + "[15:41:46] Simulation (INFO) - Progress... 10%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0030517578125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071941\n", + "[15:41:46] Simulation (INFO) - Progress... 10%\n", + "[15:41:46] Simulation (INFO) - Progress... 10%\n", + "[15:41:46] Simulation (INFO) - Progress... 10%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0030517578125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071941\n", + "[15:41:46] Simulation (INFO) - Progress... 11%\n", + "[15:41:46] Simulation (INFO) - Progress... 11%\n", + "[15:41:46] Simulation (INFO) - Progress... 11%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0030517578125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071941\n", + "[15:41:46] Simulation (INFO) - Progress... 11%\n", + "[15:41:46] Simulation (INFO) - Progress... 11%\n", + "[15:41:46] Simulation (INFO) - Progress... 11%\n", + "[15:41:46] Simulation (INFO) - Progress... 12%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00311279296875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071941\n", + "[15:41:46] Simulation (INFO) - Progress... 12%\n", + "[15:41:46] Simulation (INFO) - Progress... 12%\n", + "[15:41:46] Simulation (INFO) - Progress... 12%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00323486328125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071941\n", + "[15:41:46] Simulation (INFO) - Progress... 12%\n", + "[15:41:46] Simulation (INFO) - Progress... 12%\n", + "[15:41:46] Simulation (INFO) - Progress... 13%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00347900390625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071941\n", + "[15:41:46] Simulation (INFO) - Progress... 13%\n", + "[15:41:46] Simulation (INFO) - Progress... 13%\n", + "[15:41:46] Simulation (INFO) - Progress... 13%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00396728515625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071943\n", + "[15:41:46] Simulation (INFO) - Progress... 13%\n", + "[15:41:46] Simulation (INFO) - Progress... 13%\n", + "[15:41:46] Simulation (INFO) - Progress... 14%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00494384765625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9997200110071943\n", + "[15:41:46] Simulation (INFO) - Progress... 14%\n", + "[15:41:46] Simulation (INFO) - Progress... 14%\n", + "[15:41:46] Simulation (INFO) - Progress... 14%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.0062255859375\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9992820662866865\n", + "[15:41:46] Simulation (INFO) - Progress... 14%\n", + "[15:41:46] Simulation (INFO) - Progress... 14%\n", + "[15:41:46] Simulation (INFO) - Progress... 15%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.006561279296875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9986887177546038\n", + "[15:41:46] Simulation (INFO) - Progress... 15%\n", + "[15:41:46] Simulation (INFO) - Progress... 15%\n", + "[15:41:46] Simulation (INFO) - Progress... 15%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.006561279296875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9986887177546038\n", + "[15:41:46] Simulation (INFO) - Progress... 15%\n", + "[15:41:46] Simulation (INFO) - Progress... 15%\n", + "[15:41:46] Simulation (INFO) - Progress... 16%\n", + "[15:41:46] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:46] MPS (INFO) - Fidelity before optimisation=0.9986887177546038\n", + "[15:41:46] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:46] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9992190736072919\n", + "[15:41:46] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:46] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9992335371417129\n", + "[15:41:46] MPS (INFO) - Final fidelity after optimisation=0.9992335371417129\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.006561279296875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9992335371417129\n", + "[15:41:46] Simulation (INFO) - Progress... 16%\n", + "[15:41:46] Simulation (INFO) - Progress... 16%\n", + "[15:41:46] Simulation (INFO) - Progress... 16%\n", + "[15:41:46] Simulation (INFO) - Progress... 16%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.006622314453125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9992335371417131\n", + "[15:41:46] Simulation (INFO) - Progress... 16%\n", + "[15:41:46] Simulation (INFO) - Progress... 17%\n", + "[15:41:46] Simulation (INFO) - Progress... 17%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.006744384765625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9992335371417131\n", + "[15:41:46] Simulation (INFO) - Progress... 17%\n", + "[15:41:46] Simulation (INFO) - Progress... 17%\n", + "[15:41:46] Simulation (INFO) - Progress... 17%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.006988525390625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9992335371417131\n", + "[15:41:46] Simulation (INFO) - Progress... 17%\n", + "[15:41:46] Simulation (INFO) - Progress... 18%\n", + "[15:41:46] Simulation (INFO) - Progress... 18%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.007476806640625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9992335371417131\n", + "[15:41:46] Simulation (INFO) - Progress... 18%\n", + "[15:41:46] Simulation (INFO) - Progress... 18%\n", + "[15:41:46] Simulation (INFO) - Progress... 18%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.007476806640625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9982345023466558\n", + "[15:41:46] Simulation (INFO) - Progress... 18%\n", + "[15:41:46] Simulation (INFO) - Progress... 19%\n", + "[15:41:46] Simulation (INFO) - Progress... 19%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.008209228515625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9975515249441151\n", + "[15:41:46] Simulation (INFO) - Progress... 19%\n", + "[15:41:46] Simulation (INFO) - Progress... 19%\n", + "[15:41:46] Simulation (INFO) - Progress... 19%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00860595703125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9967787323351995\n", + "[15:41:46] Simulation (INFO) - Progress... 20%\n", + "[15:41:46] Simulation (INFO) - Progress... 20%\n", + "[15:41:46] Simulation (INFO) - Progress... 20%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.00958251953125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.996089833981607\n", + "[15:41:46] Simulation (INFO) - Progress... 20%\n", + "[15:41:46] Simulation (INFO) - Progress... 20%\n", + "[15:41:46] Simulation (INFO) - Progress... 20%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.009979248046875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.996089833981607\n", + "[15:41:46] Simulation (INFO) - Progress... 21%\n", + "[15:41:46] Simulation (INFO) - Progress... 21%\n", + "[15:41:46] Simulation (INFO) - Progress... 21%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.009979248046875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9960898339816068\n", + "[15:41:46] Simulation (INFO) - Progress... 21%\n", + "[15:41:46] Simulation (INFO) - Progress... 21%\n", + "[15:41:46] Simulation (INFO) - Progress... 21%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.009979248046875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9960898339816068\n", + "[15:41:46] Simulation (INFO) - Progress... 22%\n", + "[15:41:46] Simulation (INFO) - Progress... 22%\n", + "[15:41:46] Simulation (INFO) - Progress... 22%\n", + "[15:41:46] Simulation (INFO) - Progress... 22%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.009979248046875\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9955765571586642\n", + "[15:41:46] Simulation (INFO) - Progress... 22%\n", + "[15:41:46] Simulation (INFO) - Progress... 22%\n", + "[15:41:46] Simulation (INFO) - Progress... 23%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.01007080078125\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9955765571586642\n", + "[15:41:46] Simulation (INFO) - Progress... 23%\n", + "[15:41:46] Simulation (INFO) - Progress... 23%\n", + "[15:41:46] Simulation (INFO) - Progress... 23%\n", + "[15:41:46] MPS (INFO) - MPS size (MiB)=0.01031494140625\n", + "[15:41:46] MPS (INFO) - MPS fidelity=0.9955765571586642\n", + "[15:41:46] Simulation (INFO) - Progress... 23%\n", + "[15:41:46] Simulation (INFO) - Progress... 23%\n", + "[15:41:46] Simulation (INFO) - Progress... 24%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01080322265625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9955765571586642\n", + "[15:41:47] Simulation (INFO) - Progress... 24%\n", + "[15:41:47] Simulation (INFO) - Progress... 24%\n", + "[15:41:47] Simulation (INFO) - Progress... 24%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01153564453125\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9951866821980899\n", + "[15:41:47] Simulation (INFO) - Progress... 24%\n", + "[15:41:47] Simulation (INFO) - Progress... 24%\n", + "[15:41:47] Simulation (INFO) - Progress... 25%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.012542724609375\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9945684970193788\n", + "[15:41:47] Simulation (INFO) - Progress... 25%\n", + "[15:41:47] Simulation (INFO) - Progress... 25%\n", + "[15:41:47] Simulation (INFO) - Progress... 25%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.013336181640625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9937800765622566\n", + "[15:41:47] Simulation (INFO) - Progress... 25%\n", + "[15:41:47] Simulation (INFO) - Progress... 25%\n", + "[15:41:47] Simulation (INFO) - Progress... 26%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.015167236328125\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9933657156418472\n", + "[15:41:47] Simulation (INFO) - Progress... 26%\n", + "[15:41:47] Simulation (INFO) - Progress... 26%\n", + "[15:41:47] Simulation (INFO) - Progress... 26%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.016326904296875\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9926168168757035\n", + "[15:41:47] Simulation (INFO) - Progress... 26%\n", + "[15:41:47] Simulation (INFO) - Progress... 26%\n", + "[15:41:47] Simulation (INFO) - Progress... 27%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01806640625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9919907474019105\n", + "[15:41:47] Simulation (INFO) - Progress... 27%\n", + "[15:41:47] Simulation (INFO) - Progress... 27%\n", + "[15:41:47] Simulation (INFO) - Progress... 27%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01806640625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9919907474019105\n", + "[15:41:47] Simulation (INFO) - Progress... 27%\n", + "[15:41:47] Simulation (INFO) - Progress... 27%\n", + "[15:41:47] Simulation (INFO) - Progress... 28%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01806640625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9919907474019105\n", + "[15:41:47] Simulation (INFO) - Progress... 28%\n", + "[15:41:47] Simulation (INFO) - Progress... 28%\n", + "[15:41:47] Simulation (INFO) - Progress... 28%\n", + "[15:41:47] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:47] MPS (INFO) - Fidelity before optimisation=0.9919907474019105\n", + "[15:41:47] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:47] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9944986651228879\n", + "[15:41:47] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:47] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9945622863823858\n", + "[15:41:47] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:47] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9945744642325651\n", + "[15:41:47] MPS (INFO) - Final fidelity after optimisation=0.9945744642325651\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01806640625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9945744642325651\n", + "[15:41:47] Simulation (INFO) - Progress... 28%\n", + "[15:41:47] Simulation (INFO) - Progress... 28%\n", + "[15:41:47] Simulation (INFO) - Progress... 29%\n", + "[15:41:47] Simulation (INFO) - Progress... 29%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.01812744140625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9945744642325651\n", + "[15:41:47] Simulation (INFO) - Progress... 29%\n", + "[15:41:47] Simulation (INFO) - Progress... 29%\n", + "[15:41:47] Simulation (INFO) - Progress... 29%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.018218994140625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9945744642325651\n", + "[15:41:47] Simulation (INFO) - Progress... 30%\n", + "[15:41:47] Simulation (INFO) - Progress... 30%\n", + "[15:41:47] Simulation (INFO) - Progress... 30%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.018341064453125\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9945744642325651\n", + "[15:41:47] Simulation (INFO) - Progress... 30%\n", + "[15:41:47] Simulation (INFO) - Progress... 30%\n", + "[15:41:47] Simulation (INFO) - Progress... 30%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.018707275390625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9945744642325651\n", + "[15:41:47] Simulation (INFO) - Progress... 31%\n", + "[15:41:47] Simulation (INFO) - Progress... 31%\n", + "[15:41:47] Simulation (INFO) - Progress... 31%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.019439697265625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9939252776724739\n", + "[15:41:47] Simulation (INFO) - Progress... 31%\n", + "[15:41:47] Simulation (INFO) - Progress... 31%\n", + "[15:41:47] Simulation (INFO) - Progress... 31%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.021148681640625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9939252776724739\n", + "[15:41:47] Simulation (INFO) - Progress... 32%\n", + "[15:41:47] Simulation (INFO) - Progress... 32%\n", + "[15:41:47] Simulation (INFO) - Progress... 32%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.02252197265625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9936102094018504\n", + "[15:41:47] Simulation (INFO) - Progress... 32%\n", + "[15:41:47] Simulation (INFO) - Progress... 32%\n", + "[15:41:47] Simulation (INFO) - Progress... 32%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.02447509765625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9932716193018882\n", + "[15:41:47] Simulation (INFO) - Progress... 33%\n", + "[15:41:47] Simulation (INFO) - Progress... 33%\n", + "[15:41:47] Simulation (INFO) - Progress... 33%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.027679443359375\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9926992945331796\n", + "[15:41:47] Simulation (INFO) - Progress... 33%\n", + "[15:41:47] Simulation (INFO) - Progress... 33%\n", + "[15:41:47] Simulation (INFO) - Progress... 33%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.031036376953125\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9917770056878091\n", + "[15:41:47] Simulation (INFO) - Progress... 34%\n", + "[15:41:47] Simulation (INFO) - Progress... 34%\n", + "[15:41:47] Simulation (INFO) - Progress... 34%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.034332275390625\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9910186053590768\n", + "[15:41:47] Simulation (INFO) - Progress... 34%\n", + "[15:41:47] Simulation (INFO) - Progress... 34%\n", + "[15:41:47] Simulation (INFO) - Progress... 34%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.035736083984375\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9903708169455654\n", + "[15:41:47] Simulation (INFO) - Progress... 35%\n", + "[15:41:47] Simulation (INFO) - Progress... 35%\n", + "[15:41:47] Simulation (INFO) - Progress... 35%\n", + "[15:41:47] MPS (INFO) - MPS size (MiB)=0.035736083984375\n", + "[15:41:47] MPS (INFO) - MPS fidelity=0.9903708169455654\n", + "[15:41:47] Simulation (INFO) - Progress... 35%\n", + "[15:41:47] Simulation (INFO) - Progress... 35%\n", + "[15:41:47] Simulation (INFO) - Progress... 35%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.035736083984375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903708169455654\n", + "[15:41:48] Simulation (INFO) - Progress... 36%\n", + "[15:41:48] Simulation (INFO) - Progress... 36%\n", + "[15:41:48] Simulation (INFO) - Progress... 36%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.035736083984375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903708169455652\n", + "[15:41:48] Simulation (INFO) - Progress... 36%\n", + "[15:41:48] Simulation (INFO) - Progress... 36%\n", + "[15:41:48] Simulation (INFO) - Progress... 36%\n", + "[15:41:48] Simulation (INFO) - Progress... 37%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.035797119140625\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903708169455652\n", + "[15:41:48] Simulation (INFO) - Progress... 37%\n", + "[15:41:48] Simulation (INFO) - Progress... 37%\n", + "[15:41:48] Simulation (INFO) - Progress... 37%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.035919189453125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903708169455652\n", + "[15:41:48] Simulation (INFO) - Progress... 37%\n", + "[15:41:48] Simulation (INFO) - Progress... 37%\n", + "[15:41:48] Simulation (INFO) - Progress... 38%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.035919189453125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903532709139039\n", + "[15:41:48] Simulation (INFO) - Progress... 38%\n", + "[15:41:48] Simulation (INFO) - Progress... 38%\n", + "[15:41:48] Simulation (INFO) - Progress... 38%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.036163330078125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903532709139038\n", + "[15:41:48] Simulation (INFO) - Progress... 38%\n", + "[15:41:48] Simulation (INFO) - Progress... 38%\n", + "[15:41:48] Simulation (INFO) - Progress... 39%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.036651611328125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9903532709139038\n", + "[15:41:48] Simulation (INFO) - Progress... 39%\n", + "[15:41:48] Simulation (INFO) - Progress... 39%\n", + "[15:41:48] Simulation (INFO) - Progress... 39%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.03765869140625\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9899182044513357\n", + "[15:41:48] Simulation (INFO) - Progress... 39%\n", + "[15:41:48] Simulation (INFO) - Progress... 40%\n", + "[15:41:48] Simulation (INFO) - Progress... 40%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.038116455078125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9892830604520672\n", + "[15:41:48] Simulation (INFO) - Progress... 40%\n", + "[15:41:48] Simulation (INFO) - Progress... 40%\n", + "[15:41:48] Simulation (INFO) - Progress... 40%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.040313720703125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9886878009898008\n", + "[15:41:48] Simulation (INFO) - Progress... 40%\n", + "[15:41:48] Simulation (INFO) - Progress... 41%\n", + "[15:41:48] Simulation (INFO) - Progress... 41%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.043121337890625\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9877332864162025\n", + "[15:41:48] Simulation (INFO) - Progress... 41%\n", + "[15:41:48] Simulation (INFO) - Progress... 41%\n", + "[15:41:48] Simulation (INFO) - Progress... 41%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.047698974609375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9870492609117136\n", + "[15:41:48] Simulation (INFO) - Progress... 41%\n", + "[15:41:48] Simulation (INFO) - Progress... 42%\n", + "[15:41:48] Simulation (INFO) - Progress... 42%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.052581787109375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9864155906572986\n", + "[15:41:48] Simulation (INFO) - Progress... 42%\n", + "[15:41:48] Simulation (INFO) - Progress... 42%\n", + "[15:41:48] Simulation (INFO) - Progress... 42%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.060150146484375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.985553172457638\n", + "[15:41:48] Simulation (INFO) - Progress... 42%\n", + "[15:41:48] Simulation (INFO) - Progress... 43%\n", + "[15:41:48] Simulation (INFO) - Progress... 43%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.066925048828125\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9848524485301354\n", + "[15:41:48] Simulation (INFO) - Progress... 43%\n", + "[15:41:48] Simulation (INFO) - Progress... 43%\n", + "[15:41:48] Simulation (INFO) - Progress... 43%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.068695068359375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9848524485301354\n", + "[15:41:48] Simulation (INFO) - Progress... 43%\n", + "[15:41:48] Simulation (INFO) - Progress... 44%\n", + "[15:41:48] Simulation (INFO) - Progress... 44%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.068695068359375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9848524485301353\n", + "[15:41:48] Simulation (INFO) - Progress... 44%\n", + "[15:41:48] Simulation (INFO) - Progress... 44%\n", + "[15:41:48] Simulation (INFO) - Progress... 44%\n", + "[15:41:48] MPS (INFO) - MPS size (MiB)=0.068695068359375\n", + "[15:41:48] MPS (INFO) - MPS fidelity=0.9848524485301353\n", + "[15:41:48] Simulation (INFO) - Progress... 44%\n", + "[15:41:48] Simulation (INFO) - Progress... 45%\n", + "[15:41:48] Simulation (INFO) - Progress... 45%\n", + "[15:41:48] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:48] MPS (INFO) - Fidelity before optimisation=0.9848524485301353\n", + "[15:41:48] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:48] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9873602516768857\n", + "[15:41:48] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:48] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9874400577886869\n", + "[15:41:48] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:48] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9874665951742544\n", + "[15:41:48] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:49] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.987479443857063\n", + "[15:41:49] MPS (INFO) - Final fidelity after optimisation=0.987479443857063\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.068695068359375\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.987479443857063\n", + "[15:41:49] Simulation (INFO) - Progress... 45%\n", + "[15:41:49] Simulation (INFO) - Progress... 45%\n", + "[15:41:49] Simulation (INFO) - Progress... 45%\n", + "[15:41:49] Simulation (INFO) - Progress... 45%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.068756103515625\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.987479443857063\n", + "[15:41:49] Simulation (INFO) - Progress... 46%\n", + "[15:41:49] Simulation (INFO) - Progress... 46%\n", + "[15:41:49] Simulation (INFO) - Progress... 46%\n", + "[15:41:49] Simulation (INFO) - Progress... 46%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.068878173828125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.987479443857063\n", + "[15:41:49] Simulation (INFO) - Progress... 46%\n", + "[15:41:49] Simulation (INFO) - Progress... 46%\n", + "[15:41:49] Simulation (INFO) - Progress... 47%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.068878173828125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.987479443857063\n", + "[15:41:49] Simulation (INFO) - Progress... 47%\n", + "[15:41:49] Simulation (INFO) - Progress... 47%\n", + "[15:41:49] Simulation (INFO) - Progress... 47%\n", + "[15:41:49] Simulation (INFO) - Progress... 47%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.069122314453125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.987479443857063\n", + "[15:41:49] Simulation (INFO) - Progress... 47%\n", + "[15:41:49] Simulation (INFO) - Progress... 48%\n", + "[15:41:49] Simulation (INFO) - Progress... 48%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.069488525390625\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.987479443857063\n", + "[15:41:49] Simulation (INFO) - Progress... 48%\n", + "[15:41:49] Simulation (INFO) - Progress... 48%\n", + "[15:41:49] Simulation (INFO) - Progress... 48%\n", + "[15:41:49] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:49] MPS (INFO) - Fidelity before optimisation=0.987479443857063\n", + "[15:41:49] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:49] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9874794438570587\n", + "[15:41:49] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:49] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9874794438570632\n", + "[15:41:49] MPS (INFO) - Final fidelity after optimisation=0.9874794438570632\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.069488525390625\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570632\n", + "[15:41:49] Simulation (INFO) - Progress... 48%\n", + "[15:41:49] Simulation (INFO) - Progress... 49%\n", + "[15:41:49] Simulation (INFO) - Progress... 49%\n", + "[15:41:49] Simulation (INFO) - Progress... 49%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.069854736328125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570632\n", + "[15:41:49] Simulation (INFO) - Progress... 49%\n", + "[15:41:49] Simulation (INFO) - Progress... 49%\n", + "[15:41:49] Simulation (INFO) - Progress... 50%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.070831298828125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570634\n", + "[15:41:49] Simulation (INFO) - Progress... 50%\n", + "[15:41:49] Simulation (INFO) - Progress... 50%\n", + "[15:41:49] Simulation (INFO) - Progress... 50%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.070831298828125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570634\n", + "[15:41:49] Simulation (INFO) - Progress... 50%\n", + "[15:41:49] Simulation (INFO) - Progress... 50%\n", + "[15:41:49] Simulation (INFO) - Progress... 51%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.070831298828125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570637\n", + "[15:41:49] Simulation (INFO) - Progress... 51%\n", + "[15:41:49] Simulation (INFO) - Progress... 51%\n", + "[15:41:49] Simulation (INFO) - Progress... 51%\n", + "[15:41:49] Simulation (INFO) - Progress... 51%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.071319580078125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570637\n", + "[15:41:49] Simulation (INFO) - Progress... 51%\n", + "[15:41:49] Simulation (INFO) - Progress... 52%\n", + "[15:41:49] Simulation (INFO) - Progress... 52%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.072784423828125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9874794438570637\n", + "[15:41:49] Simulation (INFO) - Progress... 52%\n", + "[15:41:49] Simulation (INFO) - Progress... 52%\n", + "[15:41:49] Simulation (INFO) - Progress... 52%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.072540283203125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9866330729559818\n", + "[15:41:49] Simulation (INFO) - Progress... 52%\n", + "[15:41:49] Simulation (INFO) - Progress... 53%\n", + "[15:41:49] Simulation (INFO) - Progress... 53%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.073211669921875\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9866330729559818\n", + "[15:41:49] Simulation (INFO) - Progress... 53%\n", + "[15:41:49] Simulation (INFO) - Progress... 53%\n", + "[15:41:49] Simulation (INFO) - Progress... 53%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.073822021484375\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9866330729559818\n", + "[15:41:49] Simulation (INFO) - Progress... 53%\n", + "[15:41:49] Simulation (INFO) - Progress... 54%\n", + "[15:41:49] Simulation (INFO) - Progress... 54%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.074920654296875\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9866330729559817\n", + "[15:41:49] Simulation (INFO) - Progress... 54%\n", + "[15:41:49] Simulation (INFO) - Progress... 54%\n", + "[15:41:49] Simulation (INFO) - Progress... 54%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.074920654296875\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.985728058386732\n", + "[15:41:49] Simulation (INFO) - Progress... 54%\n", + "[15:41:49] Simulation (INFO) - Progress... 55%\n", + "[15:41:49] Simulation (INFO) - Progress... 55%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.076507568359375\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9848905743017655\n", + "[15:41:49] Simulation (INFO) - Progress... 55%\n", + "[15:41:49] Simulation (INFO) - Progress... 55%\n", + "[15:41:49] Simulation (INFO) - Progress... 55%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.0782470703125\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.984200933510651\n", + "[15:41:49] Simulation (INFO) - Progress... 55%\n", + "[15:41:49] Simulation (INFO) - Progress... 56%\n", + "[15:41:49] Simulation (INFO) - Progress... 56%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.08209228515625\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9833786711539604\n", + "[15:41:49] Simulation (INFO) - Progress... 56%\n", + "[15:41:49] Simulation (INFO) - Progress... 56%\n", + "[15:41:49] Simulation (INFO) - Progress... 56%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.08514404296875\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9829054162238393\n", + "[15:41:49] Simulation (INFO) - Progress... 56%\n", + "[15:41:49] Simulation (INFO) - Progress... 57%\n", + "[15:41:49] Simulation (INFO) - Progress... 57%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.093994140625\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9823548457232609\n", + "[15:41:49] Simulation (INFO) - Progress... 57%\n", + "[15:41:49] Simulation (INFO) - Progress... 57%\n", + "[15:41:49] Simulation (INFO) - Progress... 57%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.10003662109375\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9814914262501793\n", + "[15:41:49] Simulation (INFO) - Progress... 57%\n", + "[15:41:49] Simulation (INFO) - Progress... 58%\n", + "[15:41:49] Simulation (INFO) - Progress... 58%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.116302490234375\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9806647381641405\n", + "[15:41:49] Simulation (INFO) - Progress... 58%\n", + "[15:41:49] Simulation (INFO) - Progress... 58%\n", + "[15:41:49] Simulation (INFO) - Progress... 58%\n", + "[15:41:49] MPS (INFO) - MPS size (MiB)=0.118499755859375\n", + "[15:41:49] MPS (INFO) - MPS fidelity=0.9797474281526156\n", + "[15:41:50] Simulation (INFO) - Progress... 58%\n", + "[15:41:50] Simulation (INFO) - Progress... 59%\n", + "[15:41:50] Simulation (INFO) - Progress... 59%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.137542724609375\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9792041496059278\n", + "[15:41:50] Simulation (INFO) - Progress... 59%\n", + "[15:41:50] Simulation (INFO) - Progress... 59%\n", + "[15:41:50] Simulation (INFO) - Progress... 59%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.150360107421875\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9784485799686532\n", + "[15:41:50] Simulation (INFO) - Progress... 60%\n", + "[15:41:50] Simulation (INFO) - Progress... 60%\n", + "[15:41:50] Simulation (INFO) - Progress... 60%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.175567626953125\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.977661825354294\n", + "[15:41:50] Simulation (INFO) - Progress... 60%\n", + "[15:41:50] Simulation (INFO) - Progress... 60%\n", + "[15:41:50] Simulation (INFO) - Progress... 60%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.192779541015625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9768742140627227\n", + "[15:41:50] Simulation (INFO) - Progress... 61%\n", + "[15:41:50] Simulation (INFO) - Progress... 61%\n", + "[15:41:50] Simulation (INFO) - Progress... 61%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.236358642578125\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9761008623122066\n", + "[15:41:50] Simulation (INFO) - Progress... 61%\n", + "[15:41:50] Simulation (INFO) - Progress... 61%\n", + "[15:41:50] Simulation (INFO) - Progress... 61%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.24725341796875\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9752497693902976\n", + "[15:41:50] Simulation (INFO) - Progress... 62%\n", + "[15:41:50] Simulation (INFO) - Progress... 62%\n", + "[15:41:50] Simulation (INFO) - Progress... 62%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.277008056640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208022\n", + "[15:41:50] Simulation (INFO) - Progress... 62%\n", + "[15:41:50] Simulation (INFO) - Progress... 62%\n", + "[15:41:50] Simulation (INFO) - Progress... 62%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.277008056640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208022\n", + "[15:41:50] Simulation (INFO) - Progress... 63%\n", + "[15:41:50] Simulation (INFO) - Progress... 63%\n", + "[15:41:50] Simulation (INFO) - Progress... 63%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208022\n", + "[15:41:50] Simulation (INFO) - Progress... 63%\n", + "[15:41:50] Simulation (INFO) - Progress... 63%\n", + "[15:41:50] Simulation (INFO) - Progress... 63%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208022\n", + "[15:41:50] Simulation (INFO) - Progress... 64%\n", + "[15:41:50] Simulation (INFO) - Progress... 64%\n", + "[15:41:50] Simulation (INFO) - Progress... 64%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208022\n", + "[15:41:50] Simulation (INFO) - Progress... 64%\n", + "[15:41:50] Simulation (INFO) - Progress... 64%\n", + "[15:41:50] Simulation (INFO) - Progress... 64%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208021\n", + "[15:41:50] Simulation (INFO) - Progress... 65%\n", + "[15:41:50] Simulation (INFO) - Progress... 65%\n", + "[15:41:50] Simulation (INFO) - Progress... 65%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208021\n", + "[15:41:50] Simulation (INFO) - Progress... 65%\n", + "[15:41:50] Simulation (INFO) - Progress... 65%\n", + "[15:41:50] Simulation (INFO) - Progress... 65%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208023\n", + "[15:41:50] Simulation (INFO) - Progress... 66%\n", + "[15:41:50] Simulation (INFO) - Progress... 66%\n", + "[15:41:50] Simulation (INFO) - Progress... 66%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284820556640625\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9744546401208023\n", + "[15:41:50] Simulation (INFO) - Progress... 66%\n", + "[15:41:50] MPS (INFO) - MPS size (MiB)=0.284454345703125\n", + "[15:41:50] MPS (INFO) - MPS fidelity=0.9736774416720088\n", + "[15:41:50] Simulation (INFO) - Progress... 66%\n", + "[15:41:50] Simulation (INFO) - Progress... 66%\n", + "[15:41:50] Simulation (INFO) - Progress... 67%\n", + "[15:41:50] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:50] MPS (INFO) - Fidelity before optimisation=0.9736774416720088\n", + "[15:41:50] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:50] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9822122042244481\n", + "[15:41:50] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:50] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9827583003913757\n", + "[15:41:50] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:50] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9829168903407746\n", + "[15:41:50] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:51] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.982979344248083\n", + "[15:41:51] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:51] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9830095477136648\n", + "[15:41:51] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:51] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9830260810282695\n", + "[15:41:51] MPS (INFO) - Final fidelity after optimisation=0.9830260810282695\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.284454345703125\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9825960930899819\n", + "[15:41:51] Simulation (INFO) - Progress... 67%\n", + "[15:41:51] Simulation (INFO) - Progress... 67%\n", + "[15:41:51] Simulation (INFO) - Progress... 67%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.285736083984375\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9819799784936092\n", + "[15:41:51] Simulation (INFO) - Progress... 67%\n", + "[15:41:51] Simulation (INFO) - Progress... 67%\n", + "[15:41:51] Simulation (INFO) - Progress... 68%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.288055419921875\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9811857364040928\n", + "[15:41:51] Simulation (INFO) - Progress... 68%\n", + "[15:41:51] Simulation (INFO) - Progress... 68%\n", + "[15:41:51] Simulation (INFO) - Progress... 68%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.2901611328125\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9805589329022365\n", + "[15:41:51] Simulation (INFO) - Progress... 68%\n", + "[15:41:51] Simulation (INFO) - Progress... 68%\n", + "[15:41:51] Simulation (INFO) - Progress... 69%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.29742431640625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.979774777914149\n", + "[15:41:51] Simulation (INFO) - Progress... 69%\n", + "[15:41:51] Simulation (INFO) - Progress... 69%\n", + "[15:41:51] Simulation (INFO) - Progress... 69%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.3004150390625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9790302714655779\n", + "[15:41:51] Simulation (INFO) - Progress... 69%\n", + "[15:41:51] Simulation (INFO) - Progress... 70%\n", + "[15:41:51] Simulation (INFO) - Progress... 70%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.3072509765625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9781050017075105\n", + "[15:41:51] Simulation (INFO) - Progress... 70%\n", + "[15:41:51] Simulation (INFO) - Progress... 70%\n", + "[15:41:51] Simulation (INFO) - Progress... 70%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.32537841796875\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9772629361326794\n", + "[15:41:51] Simulation (INFO) - Progress... 70%\n", + "[15:41:51] Simulation (INFO) - Progress... 71%\n", + "[15:41:51] Simulation (INFO) - Progress... 71%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.349822998046875\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9763363776760228\n", + "[15:41:51] Simulation (INFO) - Progress... 71%\n", + "[15:41:51] Simulation (INFO) - Progress... 71%\n", + "[15:41:51] Simulation (INFO) - Progress... 71%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.358062744140625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9754556940251295\n", + "[15:41:51] Simulation (INFO) - Progress... 71%\n", + "[15:41:51] Simulation (INFO) - Progress... 72%\n", + "[15:41:51] Simulation (INFO) - Progress... 72%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.365570068359375\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9745025792245486\n", + "[15:41:51] Simulation (INFO) - Progress... 72%\n", + "[15:41:51] Simulation (INFO) - Progress... 72%\n", + "[15:41:51] Simulation (INFO) - Progress... 72%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.365570068359375\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9745025792245484\n", + "[15:41:51] Simulation (INFO) - Progress... 72%\n", + "[15:41:51] Simulation (INFO) - Progress... 73%\n", + "[15:41:51] Simulation (INFO) - Progress... 73%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.365570068359375\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9745025792245484\n", + "[15:41:51] Simulation (INFO) - Progress... 73%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.365570068359375\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9745025792245482\n", + "[15:41:51] Simulation (INFO) - Progress... 73%\n", + "[15:41:51] Simulation (INFO) - Progress... 73%\n", + "[15:41:51] Simulation (INFO) - Progress... 73%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.365936279296875\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9745025792245482\n", + "[15:41:51] Simulation (INFO) - Progress... 74%\n", + "[15:41:51] Simulation (INFO) - Progress... 74%\n", + "[15:41:51] Simulation (INFO) - Progress... 74%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.366973876953125\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9739737340007235\n", + "[15:41:51] Simulation (INFO) - Progress... 74%\n", + "[15:41:51] Simulation (INFO) - Progress... 74%\n", + "[15:41:51] Simulation (INFO) - Progress... 74%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.369415283203125\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9734939221919511\n", + "[15:41:51] Simulation (INFO) - Progress... 75%\n", + "[15:41:51] Simulation (INFO) - Progress... 75%\n", + "[15:41:51] Simulation (INFO) - Progress... 75%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.374176025390625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9728701873772134\n", + "[15:41:51] Simulation (INFO) - Progress... 75%\n", + "[15:41:51] Simulation (INFO) - Progress... 75%\n", + "[15:41:51] Simulation (INFO) - Progress... 75%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.378570556640625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9720376362143338\n", + "[15:41:51] Simulation (INFO) - Progress... 76%\n", + "[15:41:51] Simulation (INFO) - Progress... 76%\n", + "[15:41:51] Simulation (INFO) - Progress... 76%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.383453369140625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.971167337001675\n", + "[15:41:51] Simulation (INFO) - Progress... 76%\n", + "[15:41:51] Simulation (INFO) - Progress... 76%\n", + "[15:41:51] Simulation (INFO) - Progress... 76%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.39910888671875\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9703795628080001\n", + "[15:41:51] Simulation (INFO) - Progress... 77%\n", + "[15:41:51] Simulation (INFO) - Progress... 77%\n", + "[15:41:51] Simulation (INFO) - Progress... 77%\n", + "[15:41:51] MPS (INFO) - MPS size (MiB)=0.43072509765625\n", + "[15:41:51] MPS (INFO) - MPS fidelity=0.9695212202086415\n", + "[15:41:51] Simulation (INFO) - Progress... 77%\n", + "[15:41:51] Simulation (INFO) - Progress... 77%\n", + "[15:41:51] Simulation (INFO) - Progress... 77%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.490478515625\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9686850339371813\n", + "[15:41:52] Simulation (INFO) - Progress... 78%\n", + "[15:41:52] Simulation (INFO) - Progress... 78%\n", + "[15:41:52] Simulation (INFO) - Progress... 78%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.5670166015625\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9678550687968107\n", + "[15:41:52] Simulation (INFO) - Progress... 78%\n", + "[15:41:52] Simulation (INFO) - Progress... 78%\n", + "[15:41:52] Simulation (INFO) - Progress... 78%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.61614990234375\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9669360842897095\n", + "[15:41:52] Simulation (INFO) - Progress... 79%\n", + "[15:41:52] Simulation (INFO) - Progress... 79%\n", + "[15:41:52] Simulation (INFO) - Progress... 79%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9660548082975919\n", + "[15:41:52] Simulation (INFO) - Progress... 79%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9660548082975919\n", + "[15:41:52] Simulation (INFO) - Progress... 79%\n", + "[15:41:52] Simulation (INFO) - Progress... 80%\n", + "[15:41:52] Simulation (INFO) - Progress... 80%\n", + "[15:41:52] Simulation (INFO) - Progress... 80%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9660548082975922\n", + "[15:41:52] Simulation (INFO) - Progress... 80%\n", + "[15:41:52] Simulation (INFO) - Progress... 80%\n", + "[15:41:52] Simulation (INFO) - Progress... 80%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9660548082975922\n", + "[15:41:52] Simulation (INFO) - Progress... 81%\n", + "[15:41:52] Simulation (INFO) - Progress... 81%\n", + "[15:41:52] Simulation (INFO) - Progress... 81%\n", + "[15:41:52] Simulation (INFO) - Progress... 81%\n", + "[15:41:52] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:52] MPS (INFO) - MPS fidelity=0.9660548082975922\n", + "[15:41:52] Simulation (INFO) - Progress... 81%\n", + "[15:41:52] Simulation (INFO) - Progress... 81%\n", + "[15:41:52] Simulation (INFO) - Progress... 82%\n", + "[15:41:52] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:52] MPS (INFO) - Fidelity before optimisation=0.9660548082975922\n", + "[15:41:52] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:52] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9714782872349863\n", + "[15:41:52] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:52] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9716864883910468\n", + "[15:41:52] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:52] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9717552987705841\n", + "[15:41:52] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:53] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9717903497055657\n", + "[15:41:53] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:53] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9718115474633439\n", + "[15:41:53] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:53] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9718256606609913\n", + "[15:41:53] MPS (INFO) - Final fidelity after optimisation=0.9718256606609913\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9718256606609913\n", + "[15:41:53] Simulation (INFO) - Progress... 82%\n", + "[15:41:53] Simulation (INFO) - Progress... 82%\n", + "[15:41:53] Simulation (INFO) - Progress... 82%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.64251708984375\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9718256606609913\n", + "[15:41:53] Simulation (INFO) - Progress... 82%\n", + "[15:41:53] Simulation (INFO) - Progress... 82%\n", + "[15:41:53] Simulation (INFO) - Progress... 83%\n", + "[15:41:53] Simulation (INFO) - Progress... 83%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.645721435546875\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.971304662959029\n", + "[15:41:53] Simulation (INFO) - Progress... 83%\n", + "[15:41:53] Simulation (INFO) - Progress... 83%\n", + "[15:41:53] Simulation (INFO) - Progress... 83%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.645721435546875\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.971304662959029\n", + "[15:41:53] Simulation (INFO) - Progress... 83%\n", + "[15:41:53] Simulation (INFO) - Progress... 84%\n", + "[15:41:53] Simulation (INFO) - Progress... 84%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.645721435546875\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9713046629590292\n", + "[15:41:53] Simulation (INFO) - Progress... 84%\n", + "[15:41:53] Simulation (INFO) - Progress... 84%\n", + "[15:41:53] Simulation (INFO) - Progress... 84%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.645721435546875\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9713046629590292\n", + "[15:41:53] Simulation (INFO) - Progress... 84%\n", + "[15:41:53] Simulation (INFO) - Progress... 85%\n", + "[15:41:53] Simulation (INFO) - Progress... 85%\n", + "[15:41:53] Simulation (INFO) - Progress... 85%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.65234375\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9705519636179583\n", + "[15:41:53] Simulation (INFO) - Progress... 85%\n", + "[15:41:53] Simulation (INFO) - Progress... 85%\n", + "[15:41:53] Simulation (INFO) - Progress... 85%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.6531982421875\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9705519636179583\n", + "[15:41:53] Simulation (INFO) - Progress... 86%\n", + "[15:41:53] Simulation (INFO) - Progress... 86%\n", + "[15:41:53] Simulation (INFO) - Progress... 86%\n", + "[15:41:53] MPS (INFO) - MPS size (MiB)=0.6531982421875\n", + "[15:41:53] MPS (INFO) - MPS fidelity=0.9705519636179583\n", + "[15:41:53] Simulation (INFO) - Progress... 86%\n", + "[15:41:53] Simulation (INFO) - Progress... 86%\n", + "[15:41:53] Simulation (INFO) - Progress... 86%\n", + "[15:41:53] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:53] MPS (INFO) - Fidelity before optimisation=0.9705519636179583\n", + "[15:41:53] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:53] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9710393809351289\n", + "[15:41:53] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:54] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9710417093966089\n", + "[15:41:54] MPS (INFO) - Final fidelity after optimisation=0.9710417093966089\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.6531982421875\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9710417093966089\n", + "[15:41:54] Simulation (INFO) - Progress... 87%\n", + "[15:41:54] Simulation (INFO) - Progress... 87%\n", + "[15:41:54] Simulation (INFO) - Progress... 87%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.6531982421875\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9710417093966089\n", + "[15:41:54] Simulation (INFO) - Progress... 87%\n", + "[15:41:54] Simulation (INFO) - Progress... 87%\n", + "[15:41:54] Simulation (INFO) - Progress... 87%\n", + "[15:41:54] Simulation (INFO) - Progress... 88%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.663360595703125\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9703316436673765\n", + "[15:41:54] Simulation (INFO) - Progress... 88%\n", + "[15:41:54] Simulation (INFO) - Progress... 88%\n", + "[15:41:54] Simulation (INFO) - Progress... 88%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.6771240234375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9697826685947312\n", + "[15:41:54] Simulation (INFO) - Progress... 88%\n", + "[15:41:54] Simulation (INFO) - Progress... 88%\n", + "[15:41:54] Simulation (INFO) - Progress... 89%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.6890869140625\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9688822088585105\n", + "[15:41:54] Simulation (INFO) - Progress... 89%\n", + "[15:41:54] Simulation (INFO) - Progress... 89%\n", + "[15:41:54] Simulation (INFO) - Progress... 89%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.7198486328125\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9681016107658179\n", + "[15:41:54] Simulation (INFO) - Progress... 89%\n", + "[15:41:54] Simulation (INFO) - Progress... 90%\n", + "[15:41:54] Simulation (INFO) - Progress... 90%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.732025146484375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.967139989859211\n", + "[15:41:54] Simulation (INFO) - Progress... 90%\n", + "[15:41:54] Simulation (INFO) - Progress... 90%\n", + "[15:41:54] Simulation (INFO) - Progress... 90%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.786224365234375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9667532538346312\n", + "[15:41:54] Simulation (INFO) - Progress... 90%\n", + "[15:41:54] Simulation (INFO) - Progress... 91%\n", + "[15:41:54] Simulation (INFO) - Progress... 91%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.805267333984375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9657875697333652\n", + "[15:41:54] Simulation (INFO) - Progress... 91%\n", + "[15:41:54] Simulation (INFO) - Progress... 91%\n", + "[15:41:54] Simulation (INFO) - Progress... 91%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.870452880859375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9649987228797965\n", + "[15:41:54] Simulation (INFO) - Progress... 91%\n", + "[15:41:54] Simulation (INFO) - Progress... 92%\n", + "[15:41:54] Simulation (INFO) - Progress... 92%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=0.927581787109375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9641126521361515\n", + "[15:41:54] Simulation (INFO) - Progress... 92%\n", + "[15:41:54] Simulation (INFO) - Progress... 92%\n", + "[15:41:54] Simulation (INFO) - Progress... 92%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=1.066741943359375\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9635105846805408\n", + "[15:41:54] Simulation (INFO) - Progress... 92%\n", + "[15:41:54] Simulation (INFO) - Progress... 93%\n", + "[15:41:54] Simulation (INFO) - Progress... 93%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=1.15728759765625\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.962589075282592\n", + "[15:41:54] Simulation (INFO) - Progress... 93%\n", + "[15:41:54] Simulation (INFO) - Progress... 93%\n", + "[15:41:54] Simulation (INFO) - Progress... 93%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=1.43927001953125\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9617602212979602\n", + "[15:41:54] Simulation (INFO) - Progress... 93%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=1.54986572265625\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9608510935810075\n", + "[15:41:54] Simulation (INFO) - Progress... 94%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=1.54986572265625\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9608510935810075\n", + "[15:41:54] Simulation (INFO) - Progress... 94%\n", + "[15:41:54] Simulation (INFO) - Progress... 94%\n", + "[15:41:54] Simulation (INFO) - Progress... 94%\n", + "[15:41:54] MPS (INFO) - MPS size (MiB)=1.54986572265625\n", + "[15:41:54] MPS (INFO) - MPS fidelity=0.9600320773213169\n", + "[15:41:54] Simulation (INFO) - Progress... 94%\n", + "[15:41:54] Simulation (INFO) - Progress... 94%\n", + "[15:41:54] Simulation (INFO) - Progress... 95%\n", + "[15:41:54] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:54] MPS (INFO) - Fidelity before optimisation=0.9600320773213169\n", + "[15:41:54] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:54] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9659019975820374\n", + "[15:41:54] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:54] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9661427864728673\n", + "[15:41:54] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:55] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9662148782989015\n", + "[15:41:55] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:55] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9662495844052902\n", + "[15:41:55] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:55] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9662703863336176\n", + "[15:41:55] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:55] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9662844523829522\n", + "[15:41:55] MPS (INFO) - Final fidelity after optimisation=0.9662844523829522\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.55718994140625\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9653257816354918\n", + "[15:41:55] Simulation (INFO) - Progress... 95%\n", + "[15:41:55] Simulation (INFO) - Progress... 95%\n", + "[15:41:55] Simulation (INFO) - Progress... 95%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.58184814453125\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9644004614054085\n", + "[15:41:55] Simulation (INFO) - Progress... 95%\n", + "[15:41:55] Simulation (INFO) - Progress... 95%\n", + "[15:41:55] Simulation (INFO) - Progress... 96%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.660125732421875\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9634633842376111\n", + "[15:41:55] Simulation (INFO) - Progress... 96%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.660125732421875\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9634633842376111\n", + "[15:41:55] Simulation (INFO) - Progress... 96%\n", + "[15:41:55] Simulation (INFO) - Progress... 96%\n", + "[15:41:55] Simulation (INFO) - Progress... 96%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.660125732421875\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9634633842376111\n", + "[15:41:55] Simulation (INFO) - Progress... 96%\n", + "[15:41:55] Simulation (INFO) - Progress... 97%\n", + "[15:41:55] Simulation (INFO) - Progress... 97%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.662017822265625\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9634633842376114\n", + "[15:41:55] Simulation (INFO) - Progress... 97%\n", + "[15:41:55] Simulation (INFO) - Progress... 97%\n", + "[15:41:55] Simulation (INFO) - Progress... 97%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.700042724609375\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9625939072465783\n", + "[15:41:55] Simulation (INFO) - Progress... 97%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.700042724609375\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9625939072465783\n", + "[15:41:55] Simulation (INFO) - Progress... 98%\n", + "[15:41:55] Simulation (INFO) - Progress... 98%\n", + "[15:41:55] Simulation (INFO) - Progress... 98%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.700042724609375\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9625939072465782\n", + "[15:41:55] Simulation (INFO) - Progress... 98%\n", + "[15:41:55] Simulation (INFO) - Progress... 98%\n", + "[15:41:55] Simulation (INFO) - Progress... 98%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.700042724609375\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9625939072465782\n", + "[15:41:55] Simulation (INFO) - Progress... 99%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.700042724609375\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9625939072465782\n", + "[15:41:55] Simulation (INFO) - Progress... 99%\n", + "[15:41:55] Simulation (INFO) - Progress... 99%\n", + "[15:41:55] Simulation (INFO) - Progress... 99%\n", + "[15:41:55] MPS (INFO) - MPS size (MiB)=1.700042724609375\n", + "[15:41:55] MPS (INFO) - MPS fidelity=0.9625939072465782\n", + "[15:41:55] Simulation (INFO) - Progress... 99%\n", + "[15:41:55] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:55] MPS (INFO) - Fidelity before optimisation=0.9625939072465782\n", + "[15:41:56] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:56] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9640884677171835\n", + "[15:41:56] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:56] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9641174266253738\n", + "[15:41:56] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:56] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9641252811032455\n", + "[15:41:56] MPS (INFO) - Final fidelity after optimisation=0.9641252811032455\n", + "[15:41:56] MPS (INFO) - Applying variational optimisation.\n", + "[15:41:56] MPS (INFO) - Fidelity before optimisation=0.9641252811032455\n", + "[15:41:56] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:56] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.9641252811032449\n", + "[15:41:56] MPS (INFO) - Doing another optimisation sweep...\n", + "[15:41:56] MPS (INFO) - Optimisation sweep completed. Current fidelity=0.964125281103245\n", + "[15:41:56] MPS (INFO) - Final fidelity after optimisation=0.964125281103245\n", + "[15:41:56] Simulation (INFO) - Simulation completed.\n", + "[15:41:56] Simulation (INFO) - Final MPS size=1.700042724609375 MiB\n", + "[15:41:56] Simulation (INFO) - Final MPS fidelity=0.964125281103245\n" ] } ], "source": [ "with CuTensorNetHandle() as libhandle:\n", - " simulate(libhandle, circuit, ContractionAlg.MPSxMPO, truncation_fidelity=0.999, loglevel=logging.INFO)" + " config = ConfigMPS(truncation_fidelity=0.999, loglevel=logging.INFO)\n", + " simulate(libhandle, circuit, ContractionAlg.MPSxMPO, config)" ] }, { @@ -2105,9 +2114,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "py-cuquantum-23.06.0-mypich-py3.9", "language": "python", - "name": "python3" + "name": "py-cuquantum-23.06.0-mypich-py3.9" }, "language_info": { "codemirror_mode": { diff --git a/pytket/extensions/cutensornet/mps/__init__.py b/pytket/extensions/cutensornet/mps/__init__.py index 7eee1b05..e2c3ec81 100644 --- a/pytket/extensions/cutensornet/mps/__init__.py +++ b/pytket/extensions/cutensornet/mps/__init__.py @@ -20,6 +20,7 @@ from .mps import ( CuTensorNetHandle, DirectionMPS, + ConfigMPS, Handle, Tensor, MPS, diff --git a/pytket/extensions/cutensornet/mps/mps.py b/pytket/extensions/cutensornet/mps/mps.py index be6c9bc0..dec6426a 100644 --- a/pytket/extensions/cutensornet/mps/mps.py +++ b/pytket/extensions/cutensornet/mps/mps.py @@ -85,76 +85,68 @@ def __exit__(self, exc_type: Any, exc_value: Any, exc_tb: Any) -> None: self._is_destroyed = True -class MPS: - """Represents a state as a Matrix Product State. - - Attributes: - chi (int): The maximum allowed dimension of a virtual bond. - truncation_fidelity (float): The target fidelity of SVD truncation. - tensors (list[Tensor]): A list of tensors in the MPS; ``tensors[0]`` is - the leftmost and ``tensors[len(self)-1]`` is the rightmost; ``tensors[i]`` - and ``tensors[i+1]`` are connected in the MPS via a bond. All of the - tensors are rank three, with the dimensions listed in ``.shape`` matching - the left, right and physical bonds, in that order. - canonical_form (dict[int, Optional[DirectionMPS]]): A dictionary mapping - positions to the canonical form direction of the corresponding tensor, - or ``None`` if it the tensor is not canonicalised. - qubit_position (dict[pytket.circuit.Qubit, int]): A dictionary mapping circuit - qubits to the position its tensor is at in the MPS. - fidelity (float): A lower bound of the fidelity, obtained by multiplying - the fidelities after each contraction. The fidelity of a contraction - corresponds to ``||^2`` where ``|psi>`` and ``|phi>`` are the - states before and after truncation (assuming both are normalised). - """ +class ConfigMPS: + """Configuration class for simulation using MPS.""" def __init__( self, - libhandle: CuTensorNetHandle, - qubits: list[Qubit], chi: Optional[int] = None, truncation_fidelity: Optional[float] = None, - float_precision: Optional[Union[np.float32, np.float64]] = None, + k: int = 4, + optim_delta: float = 1e-5, + float_precision: Union[np.float32, np.float64] = np.float64, # type: ignore + value_of_zero: float = 1e-16, loglevel: int = logging.WARNING, ): - """Initialise an MPS on the computational state ``|0>``. + """Instantiate a configuration object for MPS simulation. Note: - A ``libhandle`` should be created via a ``with CuTensorNet() as libhandle:`` - statement. The device where the MPS is stored will match the one specified - by the library handle. - Providing both a custom ``chi`` and ``truncation_fidelity`` will raise an exception. Choose one or the other (or neither, for exact simulation). Args: - libhandle: The cuTensorNet library handle that will be used to carry out - tensor operations on the MPS. - qubits: The list of qubits in the circuit to be simulated. chi: The maximum value allowed for the dimension of the virtual bonds. Higher implies better approximation but more - computational resources. If not provided, ``chi`` will be set - to ``2**(len(qubits) // 2)``, which is enough for exact contraction. + computational resources. If not provided, ``chi`` will be unbounded. truncation_fidelity: Every time a two-qubit gate is applied, the virtual bond will be truncated to the minimum dimension that satisfies ``||^2 >= trucantion_fidelity``, where ``|psi>`` and ``|phi>`` are the states before and after truncation (both normalised). If not provided, it will default to its maximum value 1. + k: If using MPSxMPO, the maximum number of layers the MPO is allowed to + have before being contracted. Increasing this might increase fidelity, + but it will also increase resource requirements exponentially. + Ignored if not using MPSxMPO. Default value is 4. + optim_delta: If using MPSxMPO, stopping criteria for the optimisation when + contracting the ``k`` layers of MPO. Stops when the increase of fidelity + between iterations is smaller than ``optim_delta``. + Ignored if not using MPSxMPO. Default value is ``1e-5``. float_precision: The floating point precision used in tensor calculations; choose from ``numpy`` types: ``np.float64`` or ``np.float32``. Complex numbers are represented using two of such ``float`` numbers. Default is ``np.float64``. - loglevel: Internal logger output level. + value_of_zero: Any number below this value will be considered equal to zero. + Even when no ``chi`` or ``truncation_fidelity`` is provided, singular + values below this number will be truncated. + We suggest to use a value slightly below what your chosen + ``float_precision`` can reasonably achieve. For instance, ``1e-16`` for + ``np.float64`` precision (default) and ``1e-7`` for ``np.float32``. + loglevel: Internal logger output level. Use 30 for warnings only, 20 for + verbose and 10 for debug mode. Raises: - ValueError: If less than two qubits are provided. ValueError: If both ``chi`` and ``truncation_fidelity`` are fixed. ValueError: If the value of ``chi`` is set below 2. ValueError: If the value of ``truncation_fidelity`` is not in [0,1]. """ - if chi is not None and truncation_fidelity is not None: + if ( + chi is not None + and truncation_fidelity is not None + and truncation_fidelity != 1.0 + ): raise ValueError("Cannot fix both chi and truncation_fidelity.") if chi is None: - chi = max(2 ** (len(qubits) // 2), 2) + chi = 2**60 # In practice, this is like having it be unbounded if truncation_fidelity is None: truncation_fidelity = 1 @@ -163,6 +155,9 @@ def __init__( if truncation_fidelity < 0 or truncation_fidelity > 1: raise ValueError("Provide a value of truncation_fidelity in [0,1].") + self.chi = chi + self.truncation_fidelity = truncation_fidelity + if float_precision is None or float_precision == np.float64: # Double precision self._real_t = np.float64 # type: ignore self._complex_t = np.complex128 # type: ignore @@ -176,16 +171,77 @@ def __init__( raise TypeError( f"Value of float_precision must be in {allowed_precisions}." ) + self.zero = value_of_zero - self._lib = libhandle - self._logger = set_logger("MPS", level=loglevel) + if value_of_zero > self._atol / 1000: + warnings.warn( + "Your chosen value_of_zero is relatively large. " + "Faithfulness of final fidelity estimate is not guaranteed.", + UserWarning, + ) - ####################################### - # Initialise the MPS with a |0> state # - ####################################### + self.k = k + self.optim_delta = optim_delta + self.loglevel = loglevel + + def copy(self) -> ConfigMPS: + """Standard copy of the contents.""" + return ConfigMPS( + chi=self.chi, + truncation_fidelity=self.truncation_fidelity, + k=self.k, + optim_delta=self.optim_delta, + float_precision=self._real_t, # type: ignore + value_of_zero=self.zero, + loglevel=self.loglevel, + ) - self.chi = chi - self.truncation_fidelity = truncation_fidelity + +class MPS: + """Represents a state as a Matrix Product State. + + Attributes: + tensors (list[Tensor]): A list of tensors in the MPS; ``tensors[0]`` is + the leftmost and ``tensors[len(self)-1]`` is the rightmost; ``tensors[i]`` + and ``tensors[i+1]`` are connected in the MPS via a bond. All of the + tensors are rank three, with the dimensions listed in ``.shape`` matching + the left, right and physical bonds, in that order. + canonical_form (dict[int, Optional[DirectionMPS]]): A dictionary mapping + positions to the canonical form direction of the corresponding tensor, + or ``None`` if it the tensor is not canonicalised. + qubit_position (dict[pytket.circuit.Qubit, int]): A dictionary mapping circuit + qubits to the position its tensor is at in the MPS. + fidelity (float): A lower bound of the fidelity, obtained by multiplying + the fidelities after each contraction. The fidelity of a contraction + corresponds to ``||^2`` where ``|psi>`` and ``|phi>`` are the + states before and after truncation (assuming both are normalised). + """ + + def __init__( + self, + libhandle: CuTensorNetHandle, + qubits: list[Qubit], + config: ConfigMPS, + ): + """Initialise an MPS on the computational state ``|0>``. + + Note: + A ``libhandle`` should be created via a ``with CuTensorNet() as libhandle:`` + statement. The device where the MPS is stored will match the one specified + by the library handle. + + Args: + libhandle: The cuTensorNet library handle that will be used to carry out + tensor operations on the MPS. + qubits: The list of qubits in the circuit to be simulated. + config: The object describing the configuration for simulation. + + Raises: + ValueError: If less than two qubits are provided. + """ + self._lib = libhandle + self._cfg = config + self._logger = set_logger("MPS", level=config.loglevel) self.fidelity = 1.0 n_tensors = len(qubits) @@ -203,7 +259,7 @@ def __init__( # Append each of the tensors initialised in state |0> m_shape = (1, 1, 2) # Two virtual bonds (dim=1) and one physical for i in range(n_tensors): - m_tensor = cp.empty(m_shape, dtype=self._complex_t) + m_tensor = cp.empty(m_shape, dtype=self._cfg._complex_t) # Initialise the tensor to ket 0 m_tensor[0][0][0] = 1 m_tensor[0][0][1] = 0 @@ -222,7 +278,7 @@ def is_valid(self) -> bool: self._flush() chi_ok = all( - all(dim <= self.chi for dim in self.get_virtual_dimensions(pos)) + all(dim <= self._cfg.chi for dim in self.get_virtual_dimensions(pos)) for pos in range(len(self)) ) phys_ok = all(self.get_physical_dimension(pos) == 2 for pos in range(len(self))) @@ -526,7 +582,7 @@ def measure(self, qubits: set[Qubit]) -> dict[Qubit, int]: self._logger.debug(f"Measuring qubits={position_qubit_map}") # Tensor for postselection to |0> - zero_tensor = cp.zeros(2, dtype=self._complex_t) + zero_tensor = cp.zeros(2, dtype=self._cfg._complex_t) zero_tensor[0] = 1 # Measure and postselect each of the positions, one by one @@ -559,7 +615,7 @@ def measure(self, qubits: set[Qubit]) -> dict[Qubit, int]: self._logger.debug(f"Outcome of qubit at {pos} is {outcome}.") # Postselect the MPS for this outcome, renormalising at the same time - postselection_tensor = cp.zeros(2, dtype=self._complex_t) + postselection_tensor = cp.zeros(2, dtype=self._cfg._complex_t) postselection_tensor[outcome] = 1 / np.sqrt( abs(outcome - prob) ) # Normalise @@ -605,18 +661,18 @@ def postselect(self, qubit_outcomes: dict[Qubit, int]) -> float: # Apply a postselection for each of the qubits for qubit, outcome in qubit_outcomes.items(): # Create the rank-1 postselection tensor - postselection_tensor = cp.zeros(2, dtype=self._complex_t) + postselection_tensor = cp.zeros(2, dtype=self._cfg._complex_t) postselection_tensor[outcome] = 1 # Apply postselection self._postselect_qubit(qubit, postselection_tensor) # Calculate the squared norm of the postselected state; this is its probability prob = self.vdot(self) - assert np.isclose(prob.imag, 0.0, atol=self._atol) + assert np.isclose(prob.imag, 0.0, atol=self._cfg._atol) prob = prob.real # Renormalise; it suffices to update the first tensor - if len(self) > 0 and not np.isclose(prob, 0.0, atol=self._atol): + if len(self) > 0 and not np.isclose(prob, 0.0, atol=self._cfg._atol): self.tensors[0] = self.tensors[0] / np.sqrt(prob) self.canonical_form[0] = None @@ -696,8 +752,8 @@ def expectation_value(self, pauli_string: QubitPauliString) -> float: pos = mps_copy.qubit_position[qubit] pauli_unitary = Op.create(pauli_optype[pauli]).get_unitary() pauli_tensor = cp.asarray( - pauli_unitary.astype(dtype=self._complex_t, copy=False), - dtype=self._complex_t, + pauli_unitary.astype(dtype=self._cfg._complex_t, copy=False), + dtype=self._cfg._complex_t, ) # Contract the Pauli to the MPS tensor of the corresponding qubit @@ -707,7 +763,7 @@ def expectation_value(self, pauli_string: QubitPauliString) -> float: # Obtain the inner product value = self.vdot(mps_copy) - assert np.isclose(value.imag, 0.0, atol=self._atol) + assert np.isclose(value.imag, 0.0, atol=self._cfg._atol) self._logger.debug(f"Expectation value is {value.real}.") return value.real @@ -772,10 +828,10 @@ def get_amplitude(self, state: int) -> complex: mps_pos_bitvalue[pos] = bitvalue # Carry out the contraction, starting from a dummy tensor - result_tensor = cp.ones(1, dtype=self._complex_t) # rank-1, dimension 1 + result_tensor = cp.ones(1, dtype=self._cfg._complex_t) # rank-1, dimension 1 for pos in range(len(self)): - postselection_tensor = cp.zeros(2, dtype=self._complex_t) + postselection_tensor = cp.zeros(2, dtype=self._cfg._complex_t) postselection_tensor[mps_pos_bitvalue[pos]] = 1 # Contract postselection with qubit into the result_tensor result_tensor = cq.contract( @@ -868,16 +924,12 @@ def copy(self) -> MPS: self._flush() # Create a dummy object - new_mps = MPS(self._lib, qubits=[]) + new_mps = MPS(self._lib, qubits=[], config=self._cfg.copy()) # Copy all data - new_mps.chi = self.chi - new_mps.truncation_fidelity = self.truncation_fidelity new_mps.fidelity = self.fidelity new_mps.tensors = [t.copy() for t in self.tensors] new_mps.canonical_form = self.canonical_form.copy() new_mps.qubit_position = self.qubit_position.copy() - new_mps._complex_t = self._complex_t - new_mps._real_t = self._real_t self._logger.debug( "Successfully copied an MPS " diff --git a/pytket/extensions/cutensornet/mps/mps_gate.py b/pytket/extensions/cutensornet/mps/mps_gate.py index 9b29d1e7..c7dc496e 100644 --- a/pytket/extensions/cutensornet/mps/mps_gate.py +++ b/pytket/extensions/cutensornet/mps/mps_gate.py @@ -52,8 +52,8 @@ def _apply_1q_gate(self, position: int, gate: Op) -> MPSxGate: """ # Load the gate's unitary to the GPU memory - gate_unitary = gate.get_unitary().astype(dtype=self._complex_t, copy=False) - gate_tensor = cp.asarray(gate_unitary, dtype=self._complex_t) + gate_unitary = gate.get_unitary().astype(dtype=self._cfg._complex_t, copy=False) + gate_tensor = cp.asarray(gate_unitary, dtype=self._cfg._complex_t) # Glossary of bond IDs # p -> physical bond of the MPS tensor @@ -102,7 +102,7 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: # Canonicalisation may be required if `new_dim` is larger than `chi` # or if set by `truncation_fidelity` - if new_dim > self.chi or self.truncation_fidelity < 1: + if new_dim > self._cfg.chi or self._cfg.truncation_fidelity < 1: # If truncation required, convert to canonical form before # contracting. Avoids the need to apply gauge transformations # to the larger tensor resulting from the contraction. @@ -116,8 +116,8 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: ) # Load the gate's unitary to the GPU memory - gate_unitary = gate.get_unitary().astype(dtype=self._complex_t, copy=False) - gate_tensor = cp.asarray(gate_unitary, dtype=self._complex_t) + gate_unitary = gate.get_unitary().astype(dtype=self._cfg._complex_t, copy=False) + gate_tensor = cp.asarray(gate_unitary, dtype=self._cfg._complex_t) # Reshape into a rank-4 tensor gate_tensor = cp.reshape(gate_tensor, (2, 2, 2, 2)) @@ -154,7 +154,7 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: R = self.tensors[r_pos] r_shape = list(R.shape) - if self.truncation_fidelity < 1: + if self._cfg.truncation_fidelity < 1: # Carry out SVD decomposition first with NO truncation # to figure out where to apply the dimension cutoff. # Then, apply S normalisation and contraction of S and L manually. @@ -165,11 +165,11 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: # be run; i.e. use standard cuTensorNet API to do the SVD # including normalisation and contraction of S with L. self._logger.debug( - f"Truncating to target fidelity={self.truncation_fidelity}" + f"Truncating to target fidelity={self._cfg.truncation_fidelity}" ) options = {"handle": self._lib.handle, "device_id": self._lib.device_id} - svd_method = tensor.SVDMethod(abs_cutoff=self._atol / 1000) + svd_method = tensor.SVDMethod(abs_cutoff=self._cfg.zero) L, S, R = tensor.decompose( "acLR->asL,scR", T, method=svd_method, options=options ) @@ -189,7 +189,7 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: new_dim = 0 # Take singular values until we surpass the target fidelity - while self.truncation_fidelity > numer / denom: + while self._cfg.truncation_fidelity > numer / denom: numer += float(S[new_dim] ** 2) new_dim += 1 this_fidelity = numer / denom @@ -200,7 +200,7 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: # pylint: disable = unexpected-keyword-arg # Disable pylint for next line L = cp.ndarray( l_shape, - dtype=self._complex_t, + dtype=self._cfg._complex_t, memptr=L.data, strides=L.strides, ) @@ -208,18 +208,18 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: # pylint: disable = unexpected-keyword-arg # Disable pylint for next line R = cp.ndarray( r_shape, - dtype=self._complex_t, + dtype=self._cfg._complex_t, memptr=R.data, strides=R.strides, ) # pylint: disable = unexpected-keyword-arg # Disable pylint for next line - S = cp.ndarray(new_dim, dtype=self._real_t, memptr=S.data) + S = cp.ndarray(new_dim, dtype=self._cfg._real_t, memptr=S.data) # Normalise S *= np.sqrt(1 / this_fidelity) # Contract S into L - S = S.astype(dtype=self._complex_t, copy=False) + S = S.astype(dtype=self._cfg._complex_t, copy=False) # Use some einsum index magic: since the virtual bond "s" appears in the # list of bonds of the output, it is not summed over. # This causes S to act as the intended diagonal matrix. @@ -235,17 +235,17 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: f"Reduced virtual bond dimension from {old_dim} to {new_dim}." ) - elif new_dim > self.chi: + elif new_dim > self._cfg.chi: # Apply SVD decomposition and truncate up to a `max_extent` (for the shared - # bond) of `self.chi`. Ask cuTensorNet to contract S directly into the L - # tensor and normalise the singular values so that the sum of its squares + # bond) of `self._cfg.chi`. Ask cuTensorNet to contract S directly into the + # L tensor and normalise the singular values so that the sum of its squares # is equal to one (i.e. the MPS is a normalised state after truncation). - self._logger.debug(f"Truncating to (or below) chosen chi={self.chi}") + self._logger.debug(f"Truncating to (or below) chosen chi={self._cfg.chi}") options = {"handle": self._lib.handle, "device_id": self._lib.device_id} svd_method = tensor.SVDMethod( - abs_cutoff=self._atol / 1000, - max_extent=self.chi, + abs_cutoff=self._cfg.zero, + max_extent=self._cfg.chi, partition="U", # Contract S directly into U (named L in our case) normalization="L2", # Sum of squares equal 1 ) @@ -276,15 +276,35 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxGate: ) else: - # No truncation is necessary. In this case, simply apply a QR decomposition - # to get back to MPS form. QR is cheaper than SVD. - self._logger.debug("No truncation is necessary, applying QR decomposition.") - + # The user did not explicitly ask for truncation, but it is advantageous to + # remove any singular values below ``self._cfg.zero``. + self._logger.debug(f"Truncating singular values below={self._cfg.zero}.") + if self._cfg.zero > self._cfg._atol / 1000: + self._logger.info( # This was raised as a warning in ConfigMPS already + "Your chosen value_of_zero is relatively large. " + "Faithfulness of final fidelity estimate is not guaranteed." + ) + + # NOTE: There is no guarantee of canonical form in this case. This is fine + # since canonicalisation is just meant to detect the optimal singular values + # to truncate, but if we find values that are essentially zero, we are safe + # to remove them. options = {"handle": self._lib.handle, "device_id": self._lib.device_id} - L, R = tensor.decompose( - "acLR->asL,scR", T, method=tensor.QRMethod(), options=options + svd_method = tensor.SVDMethod( + abs_cutoff=self._cfg.zero, + partition="U", # Contract S directly into U (named L in our case) + normalization=None, # Without canonicalisation we must not normalise + ) + L, S, R = tensor.decompose( + "acLR->asL,scR", T, method=svd_method, options=options + ) + assert S is None # Due to "partition" option in SVDMethod + + # Report to logger + self._logger.debug(f"Truncation done. Fidelity estimate unchanged.") + self._logger.debug( + f"Reduced virtual bond dimension from {new_dim} to {R.shape[0]}." ) - self._logger.debug("QR decomposition applied.") self.tensors[l_pos] = L self.tensors[r_pos] = R diff --git a/pytket/extensions/cutensornet/mps/mps_mpo.py b/pytket/extensions/cutensornet/mps/mps_mpo.py index e7f6be44..47274262 100644 --- a/pytket/extensions/cutensornet/mps/mps_mpo.py +++ b/pytket/extensions/cutensornet/mps/mps_mpo.py @@ -13,7 +13,6 @@ # limitations under the License. from __future__ import annotations # type: ignore import warnings -import logging from typing import Optional, Union @@ -33,6 +32,7 @@ from .mps import ( CuTensorNetHandle, DirectionMPS, + ConfigMPS, Tensor, MPS, ) @@ -49,12 +49,7 @@ def __init__( self, libhandle: CuTensorNetHandle, qubits: list[Qubit], - chi: Optional[int] = None, - truncation_fidelity: Optional[float] = None, - k: Optional[int] = None, - optim_delta: Optional[float] = None, - float_precision: Optional[Union[np.float32, np.float64]] = None, - loglevel: int = logging.WARNING, + config: ConfigMPS, ): """Initialise an MPS on the computational state ``|0>``. @@ -63,43 +58,13 @@ def __init__( statement. The device where the MPS is stored will match the one specified by the library handle. - Providing both a custom ``chi`` and ``truncation_fidelity`` will raise an - exception. Choose one or the other (or neither, for exact simulation). - Args: libhandle: The cuTensorNet library handle that will be used to carry out tensor operations on the MPS. qubits: The list of qubits in the circuit to be simulated. - chi: The maximum value allowed for the dimension of the virtual - bonds. Higher implies better approximation but more - computational resources. If not provided, ``chi`` will be set - to ``2**(len(qubits) // 2)``, which is enough for exact contraction. - truncation_fidelity: Every time a two-qubit gate is applied, the virtual - bond will be truncated to the minimum dimension that satisfies - ``||^2 >= trucantion_fidelity``, where ``|psi>`` and ``|phi>`` - are the states before and after truncation (both normalised). - If not provided, it will default to its maximum value 1. - k: The maximum number of layers the MPO is allowed to have before - being contracted. Increasing this might increase fidelity, but - it will also increase resource requirements exponentially. - Default value is 4. - optim_delta: Stopping criteria for the optimisation when contracting the - ``k`` layers of MPO. Stops when the increase of fidelity between - iterations is smaller than ``optim_delta``. Default value is ``1e-5``. - float_precision: The floating point precision used in tensor calculations; - choose from ``numpy`` types: ``np.float64`` or ``np.float32``. - Complex numbers are represented using two of such - ``float`` numbers. Default is ``np.float64``. - loglevel: Internal logger output level. + config: The object describing the configuration for simulation. """ - super().__init__( - libhandle=libhandle, - qubits=qubits, - chi=chi, - truncation_fidelity=truncation_fidelity, - float_precision=float_precision, - loglevel=loglevel, - ) + super().__init__(libhandle, qubits, config) # Initialise the MPO data structure. This will keep a list of the gates # batched for application to the MPS; all of them will be applied at @@ -118,23 +83,7 @@ def __init__( # Initialise the MPS that we will use as first approximation of the # variational algorithm. - self._aux_mps = MPSxGate( - libhandle=libhandle, - qubits=qubits, - chi=chi, - truncation_fidelity=truncation_fidelity, - float_precision=float_precision, - loglevel=loglevel, - ) - - if k is None: - self.k = 4 - else: - self.k = k - if optim_delta is None: - self.optim_delta = 1e-5 - else: - self.optim_delta = optim_delta + self._aux_mps = MPSxGate(libhandle, qubits, config) self._mpo_bond_counter = 0 @@ -170,8 +119,8 @@ def _apply_1q_gate(self, position: int, gate: Op) -> MPSxMPO: self._aux_mps._apply_1q_gate(position, gate) # Load the gate's unitary to the GPU memory - gate_unitary = gate.get_unitary().astype(dtype=self._complex_t, copy=False) - gate_tensor = cp.asarray(gate_unitary, dtype=self._complex_t) + gate_unitary = gate.get_unitary().astype(dtype=self._cfg._complex_t, copy=False) + gate_tensor = cp.asarray(gate_unitary, dtype=self._cfg._complex_t) # Glossary of bond IDs # i -> input to the MPO tensor @@ -224,15 +173,15 @@ def _apply_2q_gate(self, positions: tuple[int, int], gate: Op) -> MPSxMPO: r_pos = max(positions) # Check whether the MPO is large enough to flush it - if any(len(self._mpo[pos]) >= self.k for pos in [l_pos, r_pos]): + if any(len(self._mpo[pos]) >= self._cfg.k for pos in [l_pos, r_pos]): self._flush() # Apply the gate to the MPS with eager approximation self._aux_mps._apply_2q_gate(positions, gate) # Load the gate's unitary to the GPU memory - gate_unitary = gate.get_unitary().astype(dtype=self._complex_t, copy=False) - gate_tensor = cp.asarray(gate_unitary, dtype=self._complex_t) + gate_unitary = gate.get_unitary().astype(dtype=self._cfg._complex_t, copy=False) + gate_tensor = cp.asarray(gate_unitary, dtype=self._cfg._complex_t) # Reshape into a rank-4 tensor gate_tensor = cp.reshape(gate_tensor, (2, 2, 2, 2)) @@ -498,7 +447,7 @@ def update_variational_tensor( # Get the fidelity optim_fidelity = complex(cq.contract("LRP,LRP->", F.conj(), F)) - assert np.isclose(optim_fidelity.imag, 0.0, atol=self._atol) + assert np.isclose(optim_fidelity.imag, 0.0, atol=self._cfg._atol) optim_fidelity = float(optim_fidelity.real) # Normalise F and update the variational MPS @@ -520,7 +469,7 @@ def update_variational_tensor( # Repeat sweeps until the fidelity converges sweep_direction = DirectionMPS.RIGHT - while not np.isclose(prev_fidelity, sweep_fidelity, atol=self.optim_delta): + while not np.isclose(prev_fidelity, sweep_fidelity, atol=self._cfg.optim_delta): self._logger.info(f"Doing another optimisation sweep...") prev_fidelity = sweep_fidelity diff --git a/pytket/extensions/cutensornet/mps/simulation.py b/pytket/extensions/cutensornet/mps/simulation.py index 5acc1eab..1d330013 100644 --- a/pytket/extensions/cutensornet/mps/simulation.py +++ b/pytket/extensions/cutensornet/mps/simulation.py @@ -11,9 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any from enum import Enum -import logging from random import choice # type: ignore from collections import defaultdict # type: ignore @@ -26,7 +24,7 @@ from pytket.predicates import CompilationUnit from pytket.extensions.cutensornet.general import set_logger -from .mps import CuTensorNetHandle, MPS +from .mps import CuTensorNetHandle, ConfigMPS, MPS from .mps_gate import MPSxGate from .mps_mpo import MPSxMPO @@ -46,7 +44,7 @@ def simulate( libhandle: CuTensorNetHandle, circuit: Circuit, algorithm: ContractionAlg, - **kwargs: Any, + config: ConfigMPS, ) -> MPS: """Simulate the given circuit and return the ``MPS`` representing the final state. @@ -67,41 +65,26 @@ def simulate( tensor operations on the MPS. circuit: The pytket circuit to be simulated. algorithm: Choose between the values of the ``ContractionAlg`` enum. - **kwargs: Any argument accepted by the initialisers of the chosen - ``algorithm`` class can be passed as a keyword argument. See the - documentation of the corresponding class for details. + config: The configuration object for simulation. Returns: An instance of ``MPS`` containing (an approximation of) the final state of the circuit. """ - chi = kwargs.get("chi", None) - truncation_fidelity = kwargs.get("truncation_fidelity", None) - float_precision = kwargs.get("float_precision", None) - loglevel = kwargs.get("loglevel", logging.WARNING) - logger = set_logger("Simulation", level=loglevel) + logger = set_logger("Simulation", level=config.loglevel) if algorithm == ContractionAlg.MPSxGate: mps = MPSxGate( # type: ignore - libhandle=libhandle, - qubits=circuit.qubits, - chi=chi, - truncation_fidelity=truncation_fidelity, - float_precision=float_precision, - loglevel=loglevel, + libhandle, + circuit.qubits, + config, ) + elif algorithm == ContractionAlg.MPSxMPO: - k = kwargs.get("k", None) - optim_delta = kwargs.get("optim_delta", None) mps = MPSxMPO( # type: ignore - libhandle=libhandle, - qubits=circuit.qubits, - chi=chi, - truncation_fidelity=truncation_fidelity, - k=k, - optim_delta=optim_delta, - float_precision=float_precision, - loglevel=loglevel, + libhandle, + circuit.qubits, + config, ) # Sort the gates so there isn't much overhead from canonicalising back and forth. diff --git a/tests/test_mps.py b/tests/test_mps.py index 9e920fa4..ab2c5b0d 100644 --- a/tests/test_mps.py +++ b/tests/test_mps.py @@ -10,6 +10,7 @@ from pytket.pauli import Pauli, QubitPauliString # type: ignore from pytket.extensions.cutensornet.mps import ( CuTensorNetHandle, + ConfigMPS, MPS, MPSxGate, MPSxMPO, @@ -25,8 +26,8 @@ def test_libhandle_manager() -> None: # Proper use of library handle with CuTensorNetHandle() as libhandle: - mps = MPS(libhandle, qubits=circ.qubits) - assert np.isclose(mps.vdot(mps), 1, atol=mps._atol) + mps = MPS(libhandle, circ.qubits, ConfigMPS()) + assert np.isclose(mps.vdot(mps), 1, atol=mps._cfg._atol) # Catch exception due to library handle out of scope with pytest.raises(RuntimeError): @@ -37,9 +38,9 @@ def test_init() -> None: circ = Circuit(5) with CuTensorNetHandle() as libhandle: - mps_gate = MPSxGate(libhandle, qubits=circ.qubits) + mps_gate = MPSxGate(libhandle, circ.qubits, ConfigMPS()) assert mps_gate.is_valid() - mps_mpo = MPSxMPO(libhandle, qubits=circ.qubits) + mps_mpo = MPSxMPO(libhandle, circ.qubits, ConfigMPS()) assert mps_mpo.is_valid() @@ -48,11 +49,11 @@ def test_canonicalise() -> None: circ = Circuit(5) with CuTensorNetHandle() as libhandle: - mps_gate = MPSxGate(libhandle, qubits=circ.qubits) + mps_gate = MPSxGate(libhandle, circ.qubits, ConfigMPS()) # Fill up the tensors with random entries # Leftmost tensor - T_d = cp.empty(shape=(1, 4, 2), dtype=mps_gate._complex_t) + T_d = cp.empty(shape=(1, 4, 2), dtype=mps_gate._cfg._complex_t) for i1 in range(T_d.shape[1]): for i2 in range(T_d.shape[2]): T_d[0][i1][i2] = cp.random.rand() + 1j * cp.random.rand() @@ -60,7 +61,7 @@ def test_canonicalise() -> None: # Middle tensors for pos in range(1, len(mps_gate) - 1): - T_d = cp.empty(shape=(4, 4, 2), dtype=mps_gate._complex_t) + T_d = cp.empty(shape=(4, 4, 2), dtype=mps_gate._cfg._complex_t) for i0 in range(T_d.shape[0]): for i1 in range(T_d.shape[1]): for i2 in range(T_d.shape[2]): @@ -68,7 +69,7 @@ def test_canonicalise() -> None: mps_gate.tensors[pos] = T_d # Rightmost tensor - T_d = cp.empty(shape=(4, 1, 2), dtype=mps_gate._complex_t) + T_d = cp.empty(shape=(4, 1, 2), dtype=mps_gate._cfg._complex_t) for i0 in range(T_d.shape[0]): for i2 in range(T_d.shape[2]): T_d[i0][0][i2] = cp.random.rand() + 1j * cp.random.rand() @@ -88,7 +89,7 @@ def test_canonicalise() -> None: # Check that canonicalisation did not change the vector overlap = mps_gate.vdot(mps_copy) - assert np.isclose(overlap, norm_sq, atol=mps_gate._atol) + assert np.isclose(overlap, norm_sq, atol=mps_gate._cfg._atol) # Check that the corresponding tensors are in orthogonal form for pos in range(len(mps_gate)): @@ -142,23 +143,23 @@ def test_exact_circ_sim(circuit: Circuit, algorithm: ContractionAlg) -> None: state = prep_circ.get_statevector() with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, prep_circ, algorithm) + mps = simulate(libhandle, prep_circ, algorithm, ConfigMPS()) assert mps.is_valid() # Check that there was no approximation - assert np.isclose(mps.fidelity, 1.0, atol=mps._atol) + assert np.isclose(mps.fidelity, 1.0, atol=mps._cfg._atol) # Check that overlap is 1 - assert np.isclose(mps.vdot(mps), 1.0, atol=mps._atol) + assert np.isclose(mps.vdot(mps), 1.0, atol=mps._cfg._atol) # Check that all of the amplitudes are correct for b in range(2**n_qubits): assert np.isclose( mps.get_amplitude(b), state[b], - atol=mps._atol, + atol=mps._cfg._atol, ) # Check that the statevector is correct - assert np.allclose(mps.get_statevector(), state, atol=mps._atol) + assert np.allclose(mps.get_statevector(), state, atol=mps._cfg._atol) @pytest.mark.parametrize( @@ -194,10 +195,12 @@ def test_exact_circ_sim(circuit: Circuit, algorithm: ContractionAlg) -> None: def test_approx_circ_sim_gate_fid(circuit: Circuit, algorithm: ContractionAlg) -> None: prep_circ, _ = prepare_circuit(circuit) with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, prep_circ, algorithm, truncation_fidelity=0.99) + mps = simulate( + libhandle, prep_circ, algorithm, ConfigMPS(truncation_fidelity=0.99) + ) assert mps.is_valid() # Check that overlap is 1 - assert np.isclose(mps.vdot(mps), 1.0, atol=mps._atol) + assert np.isclose(mps.vdot(mps), 1.0, atol=mps._cfg._atol) @pytest.mark.parametrize( @@ -233,10 +236,10 @@ def test_approx_circ_sim_gate_fid(circuit: Circuit, algorithm: ContractionAlg) - def test_approx_circ_sim_chi(circuit: Circuit, algorithm: ContractionAlg) -> None: prep_circ, _ = prepare_circuit(circuit) with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, prep_circ, algorithm, chi=4) + mps = simulate(libhandle, prep_circ, algorithm, ConfigMPS(chi=4)) assert mps.is_valid() # Check that overlap is 1 - assert np.isclose(mps.vdot(mps), 1.0, atol=mps._atol) + assert np.isclose(mps.vdot(mps), 1.0, atol=mps._cfg._atol) @pytest.mark.parametrize( @@ -271,30 +274,34 @@ def test_float_point_options( with CuTensorNetHandle() as libhandle: # Exact - mps = simulate(libhandle, prep_circ, algorithm, float_precision=fp_precision) + mps = simulate( + libhandle, prep_circ, algorithm, ConfigMPS(float_precision=fp_precision) + ) assert mps.is_valid() # Check that overlap is 1 - assert np.isclose(mps.vdot(mps), 1.0, atol=mps._atol) + assert np.isclose(mps.vdot(mps), 1.0, atol=mps._cfg._atol) # Approximate, bound truncation fidelity mps = simulate( libhandle, prep_circ, algorithm, - truncation_fidelity=0.99, - float_precision=fp_precision, + ConfigMPS(truncation_fidelity=0.99, float_precision=fp_precision), ) assert mps.is_valid() # Check that overlap is 1 - assert np.isclose(mps.vdot(mps), 1.0, atol=mps._atol) + assert np.isclose(mps.vdot(mps), 1.0, atol=mps._cfg._atol) # Approximate, bound chi mps = simulate( - libhandle, prep_circ, algorithm, chi=4, float_precision=fp_precision + libhandle, + prep_circ, + algorithm, + ConfigMPS(chi=4, float_precision=fp_precision), ) assert mps.is_valid() # Check that overlap is 1 - assert np.isclose(mps.vdot(mps), 1.0, atol=mps._atol) + assert np.isclose(mps.vdot(mps), 1.0, atol=mps._cfg._atol) @pytest.mark.parametrize( @@ -310,32 +317,40 @@ def test_circ_approx_explicit(circuit: Circuit) -> None: # Finite gate fidelity # Check for MPSxGate mps_gate = simulate( - libhandle, circuit, ContractionAlg.MPSxGate, truncation_fidelity=0.99 + libhandle, + circuit, + ContractionAlg.MPSxGate, + ConfigMPS(truncation_fidelity=0.99), ) assert np.isclose(mps_gate.fidelity, 0.4, atol=1e-1) assert mps_gate.is_valid() - assert np.isclose(mps_gate.vdot(mps_gate), 1.0, atol=mps_gate._atol) + assert np.isclose(mps_gate.vdot(mps_gate), 1.0, atol=mps_gate._cfg._atol) # Check for MPSxMPO mps_mpo = simulate( - libhandle, circuit, ContractionAlg.MPSxMPO, truncation_fidelity=0.99 + libhandle, + circuit, + ContractionAlg.MPSxMPO, + ConfigMPS(truncation_fidelity=0.99), ) assert np.isclose(mps_mpo.fidelity, 0.6, atol=1e-1) assert mps_mpo.is_valid() - assert np.isclose(mps_mpo.vdot(mps_mpo), 1.0, atol=mps_mpo._atol) + assert np.isclose(mps_mpo.vdot(mps_mpo), 1.0, atol=mps_mpo._cfg._atol) # Fixed virtual bond dimension # Check for MPSxGate - mps_gate = simulate(libhandle, circuit, ContractionAlg.MPSxGate, chi=8) + mps_gate = simulate( + libhandle, circuit, ContractionAlg.MPSxGate, ConfigMPS(chi=8) + ) assert np.isclose(mps_gate.fidelity, 0.03, atol=1e-2) assert mps_gate.is_valid() - assert np.isclose(mps_gate.vdot(mps_gate), 1.0, atol=mps_gate._atol) + assert np.isclose(mps_gate.vdot(mps_gate), 1.0, atol=mps_gate._cfg._atol) # Check for MPSxMPO - mps_mpo = simulate(libhandle, circuit, ContractionAlg.MPSxMPO, chi=8) + mps_mpo = simulate(libhandle, circuit, ContractionAlg.MPSxMPO, ConfigMPS(chi=8)) assert np.isclose(mps_mpo.fidelity, 0.04, atol=1e-2) assert mps_mpo.is_valid() - assert np.isclose(mps_mpo.vdot(mps_mpo), 1.0, atol=mps_mpo._atol) + assert np.isclose(mps_mpo.vdot(mps_mpo), 1.0, atol=mps_mpo._cfg._atol) @pytest.mark.parametrize( @@ -370,10 +385,10 @@ def test_postselect_2q_circ(circuit: Circuit, postselect_dict: dict) -> None: sv = sv / np.sqrt(sv_prob) # Normalise with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate) + mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, ConfigMPS()) prob = mps.postselect(postselect_dict) - assert np.isclose(prob, sv_prob, atol=mps._atol) - assert np.allclose(mps.get_statevector(), sv, atol=mps._atol) + assert np.isclose(prob, sv_prob, atol=mps._cfg._atol) + assert np.allclose(mps.get_statevector(), sv, atol=mps._cfg._atol) @pytest.mark.parametrize( @@ -400,10 +415,10 @@ def test_postselect_circ(circuit: Circuit, postselect_dict: dict) -> None: sv = sv / np.sqrt(sv_prob) # Normalise with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate) + mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, ConfigMPS()) prob = mps.postselect(postselect_dict) - assert np.isclose(prob, sv_prob, atol=mps._atol) - assert np.allclose(mps.get_statevector(), sv, atol=mps._atol) + assert np.isclose(prob, sv_prob, atol=mps._cfg._atol) + assert np.allclose(mps.get_statevector(), sv, atol=mps._cfg._atol) @pytest.mark.parametrize( @@ -445,9 +460,9 @@ def test_expectation_value(circuit: Circuit, observable: QubitPauliString) -> No # Simulate the circuit and obtain the expectation value with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate) + mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, ConfigMPS()) assert np.isclose( - mps.expectation_value(observable), expectation_value, atol=mps._atol + mps.expectation_value(observable), expectation_value, atol=mps._cfg._atol ) @@ -475,7 +490,7 @@ def test_sample_circ_2q(circuit: Circuit) -> None: # Compute the samples sample_dict = {0: 0, 1: 0, 2: 0, 3: 0} with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate) + mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, ConfigMPS()) # Take samples measuring both qubits at once for _ in range(n_samples): @@ -502,7 +517,7 @@ def test_measure_circ(circuit: Circuit) -> None: qB = circuit.qubits[-3] # Third list significant qubit with CuTensorNetHandle() as libhandle: - mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate) + mps = simulate(libhandle, circuit, ContractionAlg.MPSxGate, ConfigMPS()) # Compute the probabilities of each outcome p = {(0, 0): 0.0, (0, 1): 0.0, (1, 0): 0.0, (1, 1): 0.0}