From ef901f46ca7c4ac6190f576b9abb34ea064a11a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kn=C3=BCttel?= Date: Wed, 20 Nov 2019 19:23:52 +0100 Subject: [PATCH] stuff for stabilizer state classes --- computations/Untitled.ipynb | 291 +++++++++++++++++++++++++----------- 1 file changed, 205 insertions(+), 86 deletions(-) diff --git a/computations/Untitled.ipynb b/computations/Untitled.ipynb index 292d268..58946df 100644 --- a/computations/Untitled.ipynb +++ b/computations/Untitled.ipynb @@ -6,17 +6,12 @@ "metadata": {}, "outputs": [], "source": [ + "import matplotlib.pyplot as plt\n", "from itertools import product\n", - "from functools import reduce\n", - "from operator import iconcat\n", - "import sympy\n", - "i = sympy.I\n", - "exp = sympy.exp\n", - "M = sympy.Matrix\n", - "simplify = sympy.simplify\n", - "from sympy.physics.quantum.dagger import Dagger\n", + "from collections import defaultdict\n", "\n", - "sympy.init_printing()" + "from pyqcs import CZ, GenericGate, State, H\n", + "from pyqcs.graph.util import C_L" ] }, { @@ -25,128 +20,252 @@ "metadata": {}, "outputs": [], "source": [ - "I = M([[1, 0], [0, 1]])\n", - "X = M([[0, 1], [1, 0]])\n", - "Y = M([[0, -i], [i, 0]])\n", - "Z = M([[1, 0], [0, -1]])\n", - "O = M([[0, 0], [0, 0]])" + "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(0.5000000000000001+0j)*|0b0> + (0.5000000000000001+0j)*|0b1> + (0.5000000000000001+0j)*|0b10> + (0.5000000000000001+0j)*|0b11>" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "H = M([[1, 1], [1, -1]]) / sympy.sqrt(2)\n", - "S = M([[1, 0], [0, i]])\n" + "plus_state_state_2 = (H(0) | H(1)) * State.new_zero_state(2)\n", + "plus_state_state_2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(0.5000000000000001+0j)*|0b0> + (0.5000000000000001+0j)*|0b1> + (0.5000000000000001+0j)*|0b10> + (-0.5000000000000001-0j)*|0b11>" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "s2m = {\"H\": H, \"S\": S}\n", - "def evalstr(s):\n", - " m = I\n", - " \n", - " for c in s:\n", - " m *= s2m[c]\n", - " \n", - " m.simplify()\n", - " return m" + "plus_state_state_2_cz = CZ(0, 1) * plus_state_state_2\n", + "plus_state_state_2_cz" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\frac{\\sqrt{2} i}{2} & \\frac{\\sqrt{2}}{2}\\\\- \\frac{\\sqrt{2} i}{2} & \\frac{\\sqrt{2}}{2}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ √2⋅ⅈ √2⎤\n", - "⎢ ──── ──⎥\n", - "⎢ 2 2 ⎥\n", - "⎢ ⎥\n", - "⎢-√2⋅ⅈ √2⎥\n", - "⎢────── ──⎥\n", - "⎣ 2 2 ⎦" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "evalstr(\"HSHSSH\")" + "circuits = [GenericGate(0, C_L[c0]) | GenericGate(1, C_L[c1]) for c0,c1 in product(range(24), range(24))]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "resulting_states = [c * s for c,s in product(circuits, (plus_state_state_2, plus_state_state_2_cz))]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2} i}{2}\\\\\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡√2 √2⋅ⅈ ⎤\n", - "⎢── ──── ⎥\n", - "⎢2 2 ⎥\n", - "⎢ ⎥\n", - "⎢√2 -√2⋅ⅈ ⎥\n", - "⎢── ──────⎥\n", - "⎣2 2 ⎦" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "evalstr(\"HS\")" + "def get_equivalent_states(s, resulting_states):\n", + " for i,test in enumerate(resulting_states):\n", + " if(test == s):\n", + " yield i\n", + " \n", + "equivalent_states = [list(get_equivalent_states(s, resulting_states)) for s in resulting_states]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, + "outputs": [], + "source": [ + "equivalent_state_counts = [len(e) - 1 for e in equivalent_states]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHkAAAA/CAYAAADE+2c4AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFIklEQVR4Ae2cjXXTMBSFEw4DQEcIGwAjpBuUEQIbwGECTkeAFRihsEHLBjACdIPwXdc2qurGJNF7UizrHNWW/6R7r96TLeV1uVgs1uQrcpx+bbfbF/HBuVwmA8vl8oaWvRxo3ZunwcHzYF+7v6PyXCybgQ3NO4ua2BhvLzJW+y26wLxI79uOVUK7lmPXTPX8PvzA04+YB+6/1bEn8QmvMg14S13vJOKu7NWe0upJyU9vyRlAvkHceIjI0Ixiq0zGTxaR6aXvofaz6GX/GZuP2iet7jaLDR2gcTVtuapNan6yiIxi54EVX7L/rlMRgBJfb4o1v9kn52cNofC81R/zTF2y4ouuLtVNXgdlWbOOveyO1bQFdzJ+eNYf8oWrJbeuOeyltGEhK77WTu3Jip/kb9c0dEXWm/NQ0th7GZ7ASr+Qw/FXomsi5sEnQXjfqe7n4ieZu4Z4PUsiyt0+C92syuSr8Fi8z3nN2PzUtfG5KZTB5coP9TXumm1TMRymG495pl6c9ELVj/GU9UL16DjLOY3FmqGZpMARFy78wKWpyBdU0FuzhCM/asWck8BfOyLYl0WvuvLUtmBz4Yd67ESWKCS53caa2T5qxZzrLFjCdlnXT9qiwWfOD3WYi6zeqkokXG+lsVW216hX3MvxdVMrg9ecn5bbC03+62VArjT5QgBvkuqtZ+RXPP8X2zkFDFjzw/NlZJunQZ0Wux94qL6LZ4GH2XXhx9SSh3HNR70YSG7JPLB520oNwGIY2aeN4NKXwXeytv+btIJ0bzInJz/J3HVuMf6X/X2vA9ct97za9774+pz8JJ/WjMHN5fwMJLPkXVBal6d5ayV9FyttWiu5K1X815ofF5HRb14z3t2JTfnxctdv6a3rAKcWMbRapYmSOS0Wpvx4iTyvGe/uyqb8uLhrxt4vEcZJrxlHWEeL1vx4WXIPtHXRmrc9+rOkf+iEdiz4cRUZACv00HisuWx9f84pYMCKHxd3LRwdAMRtfmvd9thbyvO8tjE/LpbcCqw14k8StxVY4/Icb/VPYDN+XBYoEFVLXg/mfrHi5Mub1HNyyYqf9rnmS40N4Yj5/OSYd2ywNT9uY/IhnNETR1e2puwNUuF3GZMPFLjqqEcEToa/ZEtOFtV3SCcr4J5k+IsUmV5cddRjavxFiowVhfFSpis0BVjsUBOS419TC+8v/6Idcu7TlmRRfTlxHFp3Svw8q/nddVGWjJvSt3TYiynWE/Vohd/97RogVUc95sLv5q6xStVVbdSjN37qa9w12/RRjWPjEXW6RPWNtSPXeS/81JNVZJeovlwijtUL+S74s4osEkjmUX1jZOc874G/BJHNo/pyijhWNwKY4+9EdllqpLLBxJtm1VGP1vh5vsZkn6XGQYXvDrpE9e2oP/cpF/yjkyH0Bk1QmAZ8Ucdj/y1oVATcoukPD6aAf1RkSNQP7o7+ZaW1GKO94cALpoDffcbrQK7n245gYNSSj3j2Xre2brHKoDhr7MWITI+ocUmxMwRT7CW5a9Ogr47NQrem2EsS2TToq1Bxu2aZYi/GXfMWW21QnDX2kiy569UKqVHcsqb9jv506x96IjsW2IsTGZAr9KgyKM4KezHuWobWgcR9VRcUZ4m9GEtuQZoFfZXsra2xZ12FCokHqFZMqgyKs8LePjf7KlSvMy662qA4a+y9u0b1bZS11junE2EA7W4i/fTzm8Yzyl1r5/UAlt/0sHv/H3LgmvlQIQwgsD479W+n43T9FyVSzpC8C/88AAAAAElFTkSuQmCC\n", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2}}{2}\\\\- \\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2}}{2}\\end{matrix}\\right]$" - ], + "image/png": "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\n", "text/plain": [ - "⎡ √2 -√2 ⎤\n", - "⎢ ── ────⎥\n", - "⎢ 2 2 ⎥\n", - "⎢ ⎥\n", - "⎢-√2 -√2 ⎥\n", - "⎢──── ────⎥\n", - "⎣ 2 2 ⎦" + "
" ] }, - "execution_count": 8, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.bar(range(len(resulting_states)), equivalent_state_counts)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "clusters = set((tuple(sorted(v)) for v in equivalent_states))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{15, 23}" + ] + }, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "evalstr(\"SSHSS\")" + "set(equivalent_state_counts)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1152" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(equivalent_states)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "resulting_states_after_cz = [CZ(0, 1) * s for s in resulting_states]\n", + "equivalent_states_after_cz = [list(get_equivalent_states(s, resulting_states_after_cz)) for s in resulting_states_after_cz]\n", + "equivalent_state_counts_after_cz = [len(e) - 1 for e in equivalent_states_after_cz]\n", + "\n", + "plt.bar(range(len(resulting_states)), equivalent_state_counts_after_cz)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{15, 23}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clusters_after_cz = set((tuple(sorted(v)) for v in equivalent_states))\n", + "set(equivalent_state_counts_after_cz)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clusters == clusters_after_cz" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "resulting_states_after_cz_C_L = [c*s for c,s in product(circuits, resulting_states)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "equivalent_states_after_cz_C_L = [list(get_equivalent_states(s, resulting_states_after_cz_C_L)) for s in resulting_states_after_cz_C_L]\n", + "equivalent_state_counts_after_cz_C_L = [len(e) - 1 for e in equivalent_states_after_cz_C_L]\n", + "\n", + "plt.bar(range(len(resulting_states_after_cz_C_L)), equivalent_state_counts_after_cz_C_L)\n", + "plt.show()" ] } ],