diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9b4d1a97..ca92b307 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,5 +30,5 @@ jobs: git clone https://github.com/vutuanhai237/qsee.git - name: Run testcases run: | - cd test + cd tests python -m pytest \ No newline at end of file diff --git a/codes/circuit.svg b/codes/circuit.svg new file mode 100644 index 00000000..bc3b7b2b --- /dev/null +++ b/codes/circuit.svg @@ -0,0 +1,563 @@ + + + + + + + + 2023-12-03T21:34:39.582017 + image/svg+xml + + + Matplotlib v3.6.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/codes/demos/AME_state.ipynb b/codes/demos/AME_state.ipynb index 2c1f8f2c..8fcda80c 100644 --- a/codes/demos/AME_state.ipynb +++ b/codes/demos/AME_state.ipynb @@ -81,7 +81,7 @@ "qng_compiler = QuantumCompilation(\n", " u = ansatz.polygongraph(num_qubits, num_layers),\n", " vdagger = state.ame(num_qubits).inverse(),\n", - " optimizer = 'qng_fubini_study'\n", + " optimizer = constant.OptimizerName.QNG_FUBINI_STUDY.value\n", ").fit()" ] }, @@ -149,7 +149,7 @@ "sgd_compiler = QuantumCompilation(\n", " u = ansatz.polygongraph(num_qubits, num_layers),\n", " vdagger = state.ame(num_qubits).inverse(),\n", - " optimizer = 'sgd'\n", + " optimizer = constant.OptimizerName.SGD.value\n", ").fit()\n", "sgd_compiler.plot()" ] diff --git a/codes/qsp.ipynb b/codes/qsp.ipynb index 08f7c08d..67cd5a96 100644 --- a/codes/qsp.ipynb +++ b/codes/qsp.ipynb @@ -37,16 +37,26 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 58, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "import sys\n", "sys.path.insert(0, '..')\n", "from qsee.compilation.qsp import QuantumStatePreparation\n", "from qsee.core import ansatz, state\n", + "from qsee.backend import constant, utilities\n", "import matplotlib.pyplot as plt\n", - "import numpy as np\n", + "import numpy as np, qiskit\n", "%load_ext autoreload\n", "%autoreload 2" ] @@ -67,92 +77,161 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 125, + "metadata": {}, + "outputs": [], + "source": [ + "def custom_ansatz(num_qubits: int) -> qiskit.QuantumCircuit:\n", + " qc = qiskit.QuantumCircuit(num_qubits)\n", + " thetas = qiskit.circuit.ParameterVector(\n", + " 'theta', 2 * num_qubits)\n", + " j = 0\n", + " for i in range(num_qubits):\n", + " qc.rx(thetas[j], i)\n", + " qc.rz(thetas[j + 1], i)\n", + " j += 2\n", + " return qc\n", + "qsp = QuantumStatePreparation(\n", + " u=custom_ansatz(num_qubits = 3),\n", + " target_state=state.w(num_qubits = 3).inverse(),\n", + ").fit(\n", + " num_steps = 200, \n", + " optimizer='sgd', \n", + " metrics_func = [\n", + " 'loss_basic', \n", + " 'compilation_trace_fidelities'\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 116, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Step: 100%|██████████| 100/100 [00:03<00:00, 28.53it/s]\n" + "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to \"iqp\" in a following release. To silence this warning, specify the current default explicitly as style=\"clifford\", or the new default as style=\"iqp\".\n", + " self._style, def_font_ratio = load_style(self._style)\n" ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "num_qubits = 3\n", - "num_layers = 1\n", - "qsp = QuantumStatePreparation(\n", - " u = ansatz.g2gn(num_qubits, num_layers),\n", - " target_state = state.w(num_qubits).inverse(),\n", + "custom_ansatz(num_qubits = 2).compose(state.w(num_qubits = 2).inverse()).draw('mpl', filename = 'circuit.svg')" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [], + "source": [ + "theta = np.pi / 2\n", + "u = np.array(\n", + " [\n", + " [1, 0, 0, 0],\n", + " [0, np.cos(theta), 0, np.sin(theta)],\n", + " [0, 0, 1, 0],\n", + " [0, np.sin(theta), 0, -np.cos(theta)],\n", + " ]\n", ")\n", - "qsp.fit(num_steps = constant.DEFAULT_NUM_STEPS, verbose = 1, optimizer = 'adam')" + "compiler = QuantumStatePreparation.prepare(u)" ] }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 77, "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "'QuantumCompilation' object has no attribute 'compilation_fidelities'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/Users/vutuanhai/Documents/GitHub/ucvqa/codes/qsp.ipynb Cell 6\u001b[0m line \u001b[0;36m3\n\u001b[1;32m 1\u001b[0m target_state \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39marray(np\u001b[39m.\u001b[39mrandom\u001b[39m.\u001b[39muniform(size\u001b[39m=\u001b[39m\u001b[39m2\u001b[39m\u001b[39m*\u001b[39m\u001b[39m*\u001b[39m\u001b[39m3\u001b[39m))\n\u001b[1;32m 2\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mqsee\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mcompilation\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mqsp\u001b[39;00m \u001b[39mimport\u001b[39;00m QuantumStatePreparation\n\u001b[0;32m----> 3\u001b[0m compiler \u001b[39m=\u001b[39m QuantumStatePreparation\u001b[39m.\u001b[39;49mprepare(target_state)\n\u001b[1;32m 4\u001b[0m compiler\u001b[39m.\u001b[39mfit(\u001b[39m30\u001b[39m)\n", - "File \u001b[0;32m~/Documents/GitHub/ucvqa/codes/../qsee/compilation/qsp.py:110\u001b[0m, in \u001b[0;36mQuantumStatePreparation.prepare\u001b[0;34m(state, error_rate, **kwargs)\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[39mreturn\u001b[39;00m QuantumStatePreparation\u001b[39m.\u001b[39mprepare_existed(state, error_rate, kwargs[\u001b[39m'\u001b[39m\u001b[39mnum_qubits\u001b[39m\u001b[39m'\u001b[39m])\n\u001b[1;32m 109\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(state, np\u001b[39m.\u001b[39mndarray):\n\u001b[0;32m--> 110\u001b[0m \u001b[39mreturn\u001b[39;00m QuantumStatePreparation\u001b[39m.\u001b[39;49mprepare_random(state, error_rate, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 111\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 112\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mTypeError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mPlease input target state name or an array\u001b[39m\u001b[39m\"\u001b[39m)\n", - "File \u001b[0;32m~/Documents/GitHub/ucvqa/codes/../qsee/compilation/qsp.py:117\u001b[0m, in \u001b[0;36mQuantumStatePreparation.prepare_random\u001b[0;34m(state, error_rate, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m compiler \u001b[39m=\u001b[39m QuantumCompilation\u001b[39m.\u001b[39mprepare(state)\n\u001b[1;32m 116\u001b[0m compiler\u001b[39m.\u001b[39mfit()\n\u001b[0;32m--> 117\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39m1\u001b[39m \u001b[39m-\u001b[39m compiler\u001b[39m.\u001b[39;49mcompilation_fidelities[\u001b[39m-\u001b[39m\u001b[39m1\u001b[39m] \u001b[39m>\u001b[39m error_rate:\n\u001b[1;32m 118\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m'\u001b[39m\u001b[39mDefault compiler is not sastify your error rate, please use other ansatz in QuantumCompilationObj\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[1;32m 119\u001b[0m \u001b[39mreturn\u001b[39;00m compiler\n", - "\u001b[0;31mAttributeError\u001b[0m: 'QuantumCompilation' object has no attribute 'compilation_fidelities'" + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to \"iqp\" in a following release. To silence this warning, specify the current default explicitly as style=\"clifford\", or the new default as style=\"iqp\".\n", + " self._style, def_font_ratio = load_style(self._style)\n" ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "target_state = np.array(np.random.uniform(size=2**3))\n", - "from qsee.compilation.qsp import QuantumStatePreparation\n", - "compiler = QuantumStatePreparation.prepare(target_state)\n", - "compiler.fit()" + "compiler.u.assign_parameters(compiler.thetas).draw(\"mpl\")" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ - "compiler2 = QuantumCompilation.prepare(target_state)\n", - "compiler2.fit(30)" + "num_qubits = 2\n", + "num_layers = 1\n", + "qsp = QuantumStatePreparation(\n", + " u=ansatz.g2gn(num_qubits, num_layers),\n", + " target_state=u,\n", + ").fit()" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 46, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - }, + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.1479254 0.35385336 0.46256374 0.04863633 0.87661814 0.85051769\n", + " 0.17240042 0.03764264]\n" + ] + } + ], + "source": [ + "a = np.array(np.random.uniform(size=2**3))\n", + "a = np.array(a)\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ { - "data": { - "image/png": "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bb57vD+3+Z7Wduax7lOO9fje8X3mafMdhoHvO9tu+8MwoNkwAAMie4cwJL6SMyLoYcRfAYWRiooK3G436enp7fanp6fz6aefdnpMaWlpp+1LS0u7PE9hYSE/+9nPAumaiIh0wRuiHFqy0CXD8AYb2gUYT0vo8RitIcf7uWG0DTz4jjHafId3v/n97Y/t7HOjZZ9htO+L91wGre3N72jfxmj3nWBwys++72/9Hk9Lu4wAJ78HU5/8o7l48eJ2oynV1dVkZWVFsEciIjKQWVrmpkhkBBRGUlNTsdlslJWVtdtfVlZGRkZGp8dkZGQE1B7A4XDgcDgC6ZqIiIj0UwFVDrLb7cyYMYOioiLfPo/HQ1FREXl5eZ0ek5eX1649wGuvvdZlexERERlcAr5NU1BQwPz585k5cyazZ8/m4Ycfpq6ujgULFgAwb948Ro4cSWFhIQC33347F110EQ8++CBXXHEFq1atYtOmTTz++OPB/U1ERESkXwo4jMydO5djx46xZMkSSktLycnJYc2aNb5JqgcPHsRqbR1wOe+883j22Wf58Y9/zP/93/8xceJEXnzxRdUYEREREUBP7RUREZEQ8fffbz1tSkRERCJKYUREREQiSmFEREREIkphRERERCJKYUREREQiSmFEREREIkphRERERCJKYUREREQiqk8+tfdU3rps1dXVEe6JiIiI+Mv773ZP9VX7RRipqakBICsrK8I9ERERkUDV1NSQlJTU5ef9ohy8x+PhyJEjJCQkYLFYgva91dXVZGVlUVJSojLzftI1C4yuV+B0zQKj6xUYXa/Anc41MwyDmpoaRowY0e65dafqFyMjVquVUaNGhez7ExMT9YcyQLpmgdH1CpyuWWB0vQKj6xW43l6z7kZEvDSBVURERCJKYUREREQialCHEYfDwdKlS3E4HJHuSr+haxYYXa/A6ZoFRtcrMLpegQvHNesXE1hFRERk4BrUIyMiIiISeQojIiIiElEKIyIiIhJRCiMiIiISUYM6jCxbtozs7GxiYmLIzc1l48aNke5Sn/Df//6XL3/5y4wYMQKLxcKLL77Y7nPDMFiyZAmZmZnExsaSn5/Prl27ItPZPqCwsJBZs2aRkJBAWloaV111FTt27GjXprGxkUWLFjFs2DCGDBnC1772NcrKyiLU48h77LHHmDp1qq+IUl5eHq+88orvc12v7t13331YLBbuuOMO3z5ds/Z++tOfYrFY2r0mT57s+1zXq6PDhw9z0003MWzYMGJjYznnnHPYtGmT7/NQ/t0/aMPI6tWrKSgoYOnSpWzevJlp06YxZ84cysvLI921iKurq2PatGksW7as089/9atf8dvf/pbly5fz3nvvER8fz5w5c2hsbAxzT/uG9evXs2jRIt59911ee+01mpqauPzyy6mrq/O1ufPOO/nXv/7Fc889x/r16zly5Ahf/epXI9jryBo1ahT33XcfxcXFbNq0iUsuuYQrr7ySbdu2Abpe3Xn//ff5/e9/z9SpU9vt1zXr6KyzzuLo0aO+11tvveX7TNervZMnT3L++ecTHR3NK6+8wieffMKDDz7I0KFDfW1C+ne/MUjNnj3bWLRoke9nt9ttjBgxwigsLIxgr/oewHjhhRd8P3s8HiMjI8O4//77ffsqKysNh8Nh/OUvf4lAD/ue8vJyAzDWr19vGIZ5faKjo43nnnvO12b79u0GYGzYsCFS3exzhg4davzhD3/Q9epGTU2NMXHiROO1114zLrroIuP22283DEN/xjqzdOlSY9q0aZ1+puvV0V133WVccMEFXX4e6r/7B+XIiMvlori4mPz8fN8+q9VKfn4+GzZsiGDP+r59+/ZRWlra7tolJSWRm5ura9eiqqoKgJSUFACKi4tpampqd80mT57M6NGjdc0At9vNqlWrqKurIy8vT9erG4sWLeKKK65od21Af8a6smvXLkaMGMG4ceO48cYbOXjwIKDr1Zl//vOfzJw5k2uuuYa0tDSmT5/OihUrfJ+H+u/+QRlGKioqcLvdpKent9ufnp5OaWlphHrVP3ivj65d5zweD3fccQfnn38+Z599NmBeM7vdTnJycru2g/2abd26lSFDhuBwOPje977HCy+8wJQpU3S9urBq1So2b95MYWFhh890zTrKzc3lySefZM2aNTz22GPs27ePCy+8kJqaGl2vTuzdu5fHHnuMiRMn8uqrr3LLLbfwP//zPzz11FNA6P/u7xdP7RXpLxYtWsTHH3/c7t60dO6MM85gy5YtVFVV8be//Y358+ezfv36SHerTyopKeH222/ntddeIyYmJtLd6Re+8IUv+LanTp1Kbm4uY8aM4a9//SuxsbER7Fnf5PF4mDlzJvfeey8A06dP5+OPP2b58uXMnz8/5OcflCMjqamp2Gy2DjOny8rKyMjIiFCv+gfv9dG16+jWW2/lpZde4o033mDUqFG+/RkZGbhcLiorK9u1H+zXzG63M2HCBGbMmEFhYSHTpk3jN7/5ja5XJ4qLiykvL+fcc88lKiqKqKgo1q9fz29/+1uioqJIT0/XNetBcnIykyZNYvfu3foz1onMzEymTJnSbt+ZZ57pu7UV6r/7B2UYsdvtzJgxg6KiIt8+j8dDUVEReXl5EexZ3zd27FgyMjLaXbvq6mree++9QXvtDMPg1ltv5YUXXuD1119n7Nix7T6fMWMG0dHR7a7Zjh07OHjw4KC9Zp3xeDw4nU5dr05ceumlbN26lS1btvheM2fO5MYbb/Rt65p1r7a2lj179pCZmak/Y504//zzO5Qk2LlzJ2PGjAHC8Hf/aU+B7adWrVplOBwO48knnzQ++eQT4zvf+Y6RnJxslJaWRrprEVdTU2N88MEHxgcffGAAxkMPPWR88MEHxoEDBwzDMIz77rvPSE5ONv7xj38YH330kXHllVcaY8eONRoaGiLc88i45ZZbjKSkJGPdunXG0aNHfa/6+npfm+9973vG6NGjjddff93YtGmTkZeXZ+Tl5UWw15F19913G+vXrzf27dtnfPTRR8bdd99tWCwWY+3atYZh6Hr5o+1qGsPQNTvVD37wA2PdunXGvn37jLffftvIz883UlNTjfLycsMwdL1OtXHjRiMqKsr4xS9+Yezatcv485//bMTFxRnPPPOMr00o/+4ftGHEMAzjkUceMUaPHm3Y7XZj9uzZxrvvvhvpLvUJb7zxhgF0eM2fP98wDHOJ109+8hMjPT3dcDgcxqWXXmrs2LEjsp2OoM6uFWD88Y9/9LVpaGgwvv/97xtDhw414uLijKuvvto4evRo5DodYd/61reMMWPGGHa73Rg+fLhx6aWX+oKIYeh6+ePUMKJr1t7cuXONzMxMw263GyNHjjTmzp1r7N692/e5rldH//rXv4yzzz7bcDgcxuTJk43HH3+83eeh/LvfYhiGcfrjKyIiIiK9MyjnjIiIiEjfoTAiIiIiEaUwIiIiIhGlMCIiIiIRpTAiIiIiEaUwIiIiIhGlMCIiIiIRpTAiIiIiEaUwIiIiIhGlMCIiIiIRpTAiIiIiEaUwIiIiIhH1/wPxEf1kRuaWPwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Default compiler is not sastify your error rate, please use other ansatz in QuantumCompilationObj\n" + ] } ], "source": [ - "plt.plot(compiler.metrics['loss_fubini_study'])\n", - "plt.plot(compiler2.metrics['loss_fubini_study'])" + "from qsee.compilation.qsp import QuantumStatePreparation\n", + "\n", + "target_state = np.array(np.random.uniform(size=2**3))\n", + "compiler = QuantumStatePreparation.prepare(target_state, error_rate=0.1)" ] }, { @@ -185,7 +264,7 @@ } ], "source": [ - "qspobj = QuantumStatePreparation.load('../experiments/test')\n", + "qspobj = QuantumStatePreparation.load(\"../experiments/test\")\n", "qspobj.fidelity" ] }, @@ -210,23 +289,16 @@ } ], "source": [ - "obj = QuantumStatePreparation.prepare('ghz', num_qubits = 3)" + "obj = QuantumStatePreparation.prepare(\"ghz\", num_qubits=3)" ] }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ - "obj.save('../experiments/test')" + "obj.save(\"../experiments/test\")" ] } ], diff --git a/codes/test.svg b/codes/test.svg new file mode 100644 index 00000000..f9b4f3a2 --- /dev/null +++ b/codes/test.svg @@ -0,0 +1,1047 @@ + + + + + + + + 2023-12-03T21:39:38.430194 + image/svg+xml + + + Matplotlib v3.6.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/codes/test/info.json b/codes/test/info.json deleted file mode 100644 index 2e862753..00000000 --- a/codes/test/info.json +++ /dev/null @@ -1 +0,0 @@ -{"u": "test/u", "vdagger": "test/vdagger", "num_qubits": 4, "num_layers": null, "thetas": [0.018512886329549283, 1.5596815390148127, -0.1423386637765468, 0.9541439666387418, 1.4468887875406098, 1.555972075274907, 2.001052180069574, 2.1809074584391395, 1.4703466596693426, -0.061215309576527044, 0.015101343579490892, 1.5224564293553327]} \ No newline at end of file diff --git a/codes/test/u.qpy b/codes/test/u.qpy deleted file mode 100644 index 8e5160b9..00000000 Binary files a/codes/test/u.qpy and /dev/null differ diff --git a/codes/test/vdagger.qpy b/codes/test/vdagger.qpy deleted file mode 100644 index 3a3951c4..00000000 Binary files a/codes/test/vdagger.qpy and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_1.qspobj b/experiments/qsp/AME_g2_3_1.qspobj deleted file mode 100644 index 41f4abf8..00000000 Binary files a/experiments/qsp/AME_g2_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_10.qspobj b/experiments/qsp/AME_g2_3_10.qspobj deleted file mode 100644 index ab2aff5f..00000000 Binary files a/experiments/qsp/AME_g2_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_2.qspobj b/experiments/qsp/AME_g2_3_2.qspobj deleted file mode 100644 index 12521734..00000000 Binary files a/experiments/qsp/AME_g2_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_3.qspobj b/experiments/qsp/AME_g2_3_3.qspobj deleted file mode 100644 index de5c9443..00000000 Binary files a/experiments/qsp/AME_g2_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_4.qspobj b/experiments/qsp/AME_g2_3_4.qspobj deleted file mode 100644 index 300ee9de..00000000 Binary files a/experiments/qsp/AME_g2_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_5.qspobj b/experiments/qsp/AME_g2_3_5.qspobj deleted file mode 100644 index 7ba55f3f..00000000 Binary files a/experiments/qsp/AME_g2_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_6.qspobj b/experiments/qsp/AME_g2_3_6.qspobj deleted file mode 100644 index a4627510..00000000 Binary files a/experiments/qsp/AME_g2_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_7.qspobj b/experiments/qsp/AME_g2_3_7.qspobj deleted file mode 100644 index 63e9065d..00000000 Binary files a/experiments/qsp/AME_g2_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_8.qspobj b/experiments/qsp/AME_g2_3_8.qspobj deleted file mode 100644 index 296c843a..00000000 Binary files a/experiments/qsp/AME_g2_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_3_9.qspobj b/experiments/qsp/AME_g2_3_9.qspobj deleted file mode 100644 index d23306f3..00000000 Binary files a/experiments/qsp/AME_g2_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_1.qspobj b/experiments/qsp/AME_g2_4_1.qspobj deleted file mode 100644 index a5e68503..00000000 Binary files a/experiments/qsp/AME_g2_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_10.qspobj b/experiments/qsp/AME_g2_4_10.qspobj deleted file mode 100644 index bcdfd010..00000000 Binary files a/experiments/qsp/AME_g2_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_2.qspobj b/experiments/qsp/AME_g2_4_2.qspobj deleted file mode 100644 index e0860f3e..00000000 Binary files a/experiments/qsp/AME_g2_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_3.qspobj b/experiments/qsp/AME_g2_4_3.qspobj deleted file mode 100644 index 888ff3ef..00000000 Binary files a/experiments/qsp/AME_g2_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_4.qspobj b/experiments/qsp/AME_g2_4_4.qspobj deleted file mode 100644 index 057e0296..00000000 Binary files a/experiments/qsp/AME_g2_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_5.qspobj b/experiments/qsp/AME_g2_4_5.qspobj deleted file mode 100644 index 15f714b6..00000000 Binary files a/experiments/qsp/AME_g2_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_6.qspobj b/experiments/qsp/AME_g2_4_6.qspobj deleted file mode 100644 index 4767b8b3..00000000 Binary files a/experiments/qsp/AME_g2_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_7.qspobj b/experiments/qsp/AME_g2_4_7.qspobj deleted file mode 100644 index 24402fd6..00000000 Binary files a/experiments/qsp/AME_g2_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_8.qspobj b/experiments/qsp/AME_g2_4_8.qspobj deleted file mode 100644 index 9dbf79db..00000000 Binary files a/experiments/qsp/AME_g2_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2_4_9.qspobj b/experiments/qsp/AME_g2_4_9.qspobj deleted file mode 100644 index 86ba0e2d..00000000 Binary files a/experiments/qsp/AME_g2_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_1.qspobj b/experiments/qsp/AME_g2gn_3_1.qspobj deleted file mode 100644 index b16a0e4e..00000000 Binary files a/experiments/qsp/AME_g2gn_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_10.qspobj b/experiments/qsp/AME_g2gn_3_10.qspobj deleted file mode 100644 index 91e8fb34..00000000 Binary files a/experiments/qsp/AME_g2gn_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_2.qspobj b/experiments/qsp/AME_g2gn_3_2.qspobj deleted file mode 100644 index 8f40c733..00000000 Binary files a/experiments/qsp/AME_g2gn_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_3.qspobj b/experiments/qsp/AME_g2gn_3_3.qspobj deleted file mode 100644 index 6408fa7e..00000000 Binary files a/experiments/qsp/AME_g2gn_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_4.qspobj b/experiments/qsp/AME_g2gn_3_4.qspobj deleted file mode 100644 index cb8415b5..00000000 Binary files a/experiments/qsp/AME_g2gn_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_5.qspobj b/experiments/qsp/AME_g2gn_3_5.qspobj deleted file mode 100644 index 33541e69..00000000 Binary files a/experiments/qsp/AME_g2gn_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_6.qspobj b/experiments/qsp/AME_g2gn_3_6.qspobj deleted file mode 100644 index 59cc2b85..00000000 Binary files a/experiments/qsp/AME_g2gn_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_7.qspobj b/experiments/qsp/AME_g2gn_3_7.qspobj deleted file mode 100644 index 5b4485e4..00000000 Binary files a/experiments/qsp/AME_g2gn_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_8.qspobj b/experiments/qsp/AME_g2gn_3_8.qspobj deleted file mode 100644 index 747ff886..00000000 Binary files a/experiments/qsp/AME_g2gn_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_3_9.qspobj b/experiments/qsp/AME_g2gn_3_9.qspobj deleted file mode 100644 index 09306106..00000000 Binary files a/experiments/qsp/AME_g2gn_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_1.qspobj b/experiments/qsp/AME_g2gn_4_1.qspobj deleted file mode 100644 index 681aad77..00000000 Binary files a/experiments/qsp/AME_g2gn_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_10.qspobj b/experiments/qsp/AME_g2gn_4_10.qspobj deleted file mode 100644 index 1c33f1ae..00000000 Binary files a/experiments/qsp/AME_g2gn_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_2.qspobj b/experiments/qsp/AME_g2gn_4_2.qspobj deleted file mode 100644 index f2969292..00000000 Binary files a/experiments/qsp/AME_g2gn_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_3.qspobj b/experiments/qsp/AME_g2gn_4_3.qspobj deleted file mode 100644 index 7cb671c3..00000000 Binary files a/experiments/qsp/AME_g2gn_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_4.qspobj b/experiments/qsp/AME_g2gn_4_4.qspobj deleted file mode 100644 index 55348585..00000000 Binary files a/experiments/qsp/AME_g2gn_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_5.qspobj b/experiments/qsp/AME_g2gn_4_5.qspobj deleted file mode 100644 index dfdbd6c1..00000000 Binary files a/experiments/qsp/AME_g2gn_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_6.qspobj b/experiments/qsp/AME_g2gn_4_6.qspobj deleted file mode 100644 index 546674bc..00000000 Binary files a/experiments/qsp/AME_g2gn_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_7.qspobj b/experiments/qsp/AME_g2gn_4_7.qspobj deleted file mode 100644 index d89bf0a5..00000000 Binary files a/experiments/qsp/AME_g2gn_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_8.qspobj b/experiments/qsp/AME_g2gn_4_8.qspobj deleted file mode 100644 index aae16f61..00000000 Binary files a/experiments/qsp/AME_g2gn_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gn_4_9.qspobj b/experiments/qsp/AME_g2gn_4_9.qspobj deleted file mode 100644 index b0899344..00000000 Binary files a/experiments/qsp/AME_g2gn_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_1.qspobj b/experiments/qsp/AME_g2gnw_3_1.qspobj deleted file mode 100644 index f6af4289..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_10.qspobj b/experiments/qsp/AME_g2gnw_3_10.qspobj deleted file mode 100644 index 4c413f6b..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_2.qspobj b/experiments/qsp/AME_g2gnw_3_2.qspobj deleted file mode 100644 index 810c5f30..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_3.qspobj b/experiments/qsp/AME_g2gnw_3_3.qspobj deleted file mode 100644 index 400bf4d7..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_4.qspobj b/experiments/qsp/AME_g2gnw_3_4.qspobj deleted file mode 100644 index decdfe2b..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_5.qspobj b/experiments/qsp/AME_g2gnw_3_5.qspobj deleted file mode 100644 index 11973a86..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_6.qspobj b/experiments/qsp/AME_g2gnw_3_6.qspobj deleted file mode 100644 index 36602c6d..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_7.qspobj b/experiments/qsp/AME_g2gnw_3_7.qspobj deleted file mode 100644 index 0fe65c2f..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_8.qspobj b/experiments/qsp/AME_g2gnw_3_8.qspobj deleted file mode 100644 index 6b42323f..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_3_9.qspobj b/experiments/qsp/AME_g2gnw_3_9.qspobj deleted file mode 100644 index c12e39bd..00000000 Binary files a/experiments/qsp/AME_g2gnw_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_1.qspobj b/experiments/qsp/AME_g2gnw_4_1.qspobj deleted file mode 100644 index 0eeea4d9..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_10.qspobj b/experiments/qsp/AME_g2gnw_4_10.qspobj deleted file mode 100644 index 68e2b4e8..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_2.qspobj b/experiments/qsp/AME_g2gnw_4_2.qspobj deleted file mode 100644 index d6d63466..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_3.qspobj b/experiments/qsp/AME_g2gnw_4_3.qspobj deleted file mode 100644 index c4306050..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_4.qspobj b/experiments/qsp/AME_g2gnw_4_4.qspobj deleted file mode 100644 index 14792c67..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_5.qspobj b/experiments/qsp/AME_g2gnw_4_5.qspobj deleted file mode 100644 index c2e05bba..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_6.qspobj b/experiments/qsp/AME_g2gnw_4_6.qspobj deleted file mode 100644 index 26bf0cf0..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_7.qspobj b/experiments/qsp/AME_g2gnw_4_7.qspobj deleted file mode 100644 index 10d79d49..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_8.qspobj b/experiments/qsp/AME_g2gnw_4_8.qspobj deleted file mode 100644 index be30766a..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/AME_g2gnw_4_9.qspobj b/experiments/qsp/AME_g2gnw_4_9.qspobj deleted file mode 100644 index f96ca68f..00000000 Binary files a/experiments/qsp/AME_g2gnw_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_1.qspobj b/experiments/qsp/W_g2_3_1.qspobj deleted file mode 100644 index b229b017..00000000 Binary files a/experiments/qsp/W_g2_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_10.qspobj b/experiments/qsp/W_g2_3_10.qspobj deleted file mode 100644 index 6c64d68d..00000000 Binary files a/experiments/qsp/W_g2_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_2.qspobj b/experiments/qsp/W_g2_3_2.qspobj deleted file mode 100644 index c140d980..00000000 Binary files a/experiments/qsp/W_g2_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_3.qspobj b/experiments/qsp/W_g2_3_3.qspobj deleted file mode 100644 index 0551334b..00000000 Binary files a/experiments/qsp/W_g2_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_4.qspobj b/experiments/qsp/W_g2_3_4.qspobj deleted file mode 100644 index 3ee97874..00000000 Binary files a/experiments/qsp/W_g2_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_5.qspobj b/experiments/qsp/W_g2_3_5.qspobj deleted file mode 100644 index 20971ff4..00000000 Binary files a/experiments/qsp/W_g2_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_6.qspobj b/experiments/qsp/W_g2_3_6.qspobj deleted file mode 100644 index f8929608..00000000 Binary files a/experiments/qsp/W_g2_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_7.qspobj b/experiments/qsp/W_g2_3_7.qspobj deleted file mode 100644 index 2fc5ee0e..00000000 Binary files a/experiments/qsp/W_g2_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_8.qspobj b/experiments/qsp/W_g2_3_8.qspobj deleted file mode 100644 index f9852085..00000000 Binary files a/experiments/qsp/W_g2_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_3_9.qspobj b/experiments/qsp/W_g2_3_9.qspobj deleted file mode 100644 index b1325bee..00000000 Binary files a/experiments/qsp/W_g2_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_1.qspobj b/experiments/qsp/W_g2_4_1.qspobj deleted file mode 100644 index c3a31f79..00000000 Binary files a/experiments/qsp/W_g2_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_10.qspobj b/experiments/qsp/W_g2_4_10.qspobj deleted file mode 100644 index 821f1812..00000000 Binary files a/experiments/qsp/W_g2_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_2.qspobj b/experiments/qsp/W_g2_4_2.qspobj deleted file mode 100644 index a3c8be17..00000000 Binary files a/experiments/qsp/W_g2_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_3.qspobj b/experiments/qsp/W_g2_4_3.qspobj deleted file mode 100644 index d74b824c..00000000 Binary files a/experiments/qsp/W_g2_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_4.qspobj b/experiments/qsp/W_g2_4_4.qspobj deleted file mode 100644 index d91c1c61..00000000 Binary files a/experiments/qsp/W_g2_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_5.qspobj b/experiments/qsp/W_g2_4_5.qspobj deleted file mode 100644 index 51795970..00000000 Binary files a/experiments/qsp/W_g2_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_6.qspobj b/experiments/qsp/W_g2_4_6.qspobj deleted file mode 100644 index d7f4bee6..00000000 Binary files a/experiments/qsp/W_g2_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_7.qspobj b/experiments/qsp/W_g2_4_7.qspobj deleted file mode 100644 index 32b573ee..00000000 Binary files a/experiments/qsp/W_g2_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_8.qspobj b/experiments/qsp/W_g2_4_8.qspobj deleted file mode 100644 index 919bd587..00000000 Binary files a/experiments/qsp/W_g2_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_4_9.qspobj b/experiments/qsp/W_g2_4_9.qspobj deleted file mode 100644 index 2f02d48f..00000000 Binary files a/experiments/qsp/W_g2_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_1.qspobj b/experiments/qsp/W_g2_5_1.qspobj deleted file mode 100644 index a216677e..00000000 Binary files a/experiments/qsp/W_g2_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_10.qspobj b/experiments/qsp/W_g2_5_10.qspobj deleted file mode 100644 index c5e34c83..00000000 Binary files a/experiments/qsp/W_g2_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_2.qspobj b/experiments/qsp/W_g2_5_2.qspobj deleted file mode 100644 index f755ad7b..00000000 Binary files a/experiments/qsp/W_g2_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_3.qspobj b/experiments/qsp/W_g2_5_3.qspobj deleted file mode 100644 index 6152ac36..00000000 Binary files a/experiments/qsp/W_g2_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_4.qspobj b/experiments/qsp/W_g2_5_4.qspobj deleted file mode 100644 index 5cfb9463..00000000 Binary files a/experiments/qsp/W_g2_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_5.qspobj b/experiments/qsp/W_g2_5_5.qspobj deleted file mode 100644 index b187c97f..00000000 Binary files a/experiments/qsp/W_g2_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_6.qspobj b/experiments/qsp/W_g2_5_6.qspobj deleted file mode 100644 index 2051b709..00000000 Binary files a/experiments/qsp/W_g2_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_7.qspobj b/experiments/qsp/W_g2_5_7.qspobj deleted file mode 100644 index 974340ad..00000000 Binary files a/experiments/qsp/W_g2_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_8.qspobj b/experiments/qsp/W_g2_5_8.qspobj deleted file mode 100644 index 9f1f37f5..00000000 Binary files a/experiments/qsp/W_g2_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_5_9.qspobj b/experiments/qsp/W_g2_5_9.qspobj deleted file mode 100644 index 30bf75cf..00000000 Binary files a/experiments/qsp/W_g2_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_1.qspobj b/experiments/qsp/W_g2_6_1.qspobj deleted file mode 100644 index 5ae34bb1..00000000 Binary files a/experiments/qsp/W_g2_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_10.qspobj b/experiments/qsp/W_g2_6_10.qspobj deleted file mode 100644 index 74c9e324..00000000 Binary files a/experiments/qsp/W_g2_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_2.qspobj b/experiments/qsp/W_g2_6_2.qspobj deleted file mode 100644 index c42d4604..00000000 Binary files a/experiments/qsp/W_g2_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_3.qspobj b/experiments/qsp/W_g2_6_3.qspobj deleted file mode 100644 index f757c975..00000000 Binary files a/experiments/qsp/W_g2_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_4.qspobj b/experiments/qsp/W_g2_6_4.qspobj deleted file mode 100644 index badba63b..00000000 Binary files a/experiments/qsp/W_g2_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_5.qspobj b/experiments/qsp/W_g2_6_5.qspobj deleted file mode 100644 index 4f5a6a59..00000000 Binary files a/experiments/qsp/W_g2_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_6.qspobj b/experiments/qsp/W_g2_6_6.qspobj deleted file mode 100644 index e17b21c1..00000000 Binary files a/experiments/qsp/W_g2_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_7.qspobj b/experiments/qsp/W_g2_6_7.qspobj deleted file mode 100644 index 1d2c69aa..00000000 Binary files a/experiments/qsp/W_g2_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_8.qspobj b/experiments/qsp/W_g2_6_8.qspobj deleted file mode 100644 index f23b9438..00000000 Binary files a/experiments/qsp/W_g2_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_6_9.qspobj b/experiments/qsp/W_g2_6_9.qspobj deleted file mode 100644 index 058c936a..00000000 Binary files a/experiments/qsp/W_g2_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_1.qspobj b/experiments/qsp/W_g2_7_1.qspobj deleted file mode 100644 index 7527ce1a..00000000 Binary files a/experiments/qsp/W_g2_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_10.qspobj b/experiments/qsp/W_g2_7_10.qspobj deleted file mode 100644 index cd5a60cb..00000000 Binary files a/experiments/qsp/W_g2_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_2.qspobj b/experiments/qsp/W_g2_7_2.qspobj deleted file mode 100644 index 3e69909a..00000000 Binary files a/experiments/qsp/W_g2_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_3.qspobj b/experiments/qsp/W_g2_7_3.qspobj deleted file mode 100644 index 489a5b50..00000000 Binary files a/experiments/qsp/W_g2_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_4.qspobj b/experiments/qsp/W_g2_7_4.qspobj deleted file mode 100644 index e4c54ec1..00000000 Binary files a/experiments/qsp/W_g2_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_5.qspobj b/experiments/qsp/W_g2_7_5.qspobj deleted file mode 100644 index 447d8ea1..00000000 Binary files a/experiments/qsp/W_g2_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_6.qspobj b/experiments/qsp/W_g2_7_6.qspobj deleted file mode 100644 index 5ec402ca..00000000 Binary files a/experiments/qsp/W_g2_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_7.qspobj b/experiments/qsp/W_g2_7_7.qspobj deleted file mode 100644 index 868ac404..00000000 Binary files a/experiments/qsp/W_g2_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_8.qspobj b/experiments/qsp/W_g2_7_8.qspobj deleted file mode 100644 index f86296b1..00000000 Binary files a/experiments/qsp/W_g2_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_7_9.qspobj b/experiments/qsp/W_g2_7_9.qspobj deleted file mode 100644 index f8f8f667..00000000 Binary files a/experiments/qsp/W_g2_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_1.qspobj b/experiments/qsp/W_g2_8_1.qspobj deleted file mode 100644 index 275b60a2..00000000 Binary files a/experiments/qsp/W_g2_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_10.qspobj b/experiments/qsp/W_g2_8_10.qspobj deleted file mode 100644 index 0d3664b3..00000000 Binary files a/experiments/qsp/W_g2_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_2.qspobj b/experiments/qsp/W_g2_8_2.qspobj deleted file mode 100644 index 567dde1f..00000000 Binary files a/experiments/qsp/W_g2_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_3.qspobj b/experiments/qsp/W_g2_8_3.qspobj deleted file mode 100644 index a4f5d5fe..00000000 Binary files a/experiments/qsp/W_g2_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_4.qspobj b/experiments/qsp/W_g2_8_4.qspobj deleted file mode 100644 index e5976db9..00000000 Binary files a/experiments/qsp/W_g2_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_5.qspobj b/experiments/qsp/W_g2_8_5.qspobj deleted file mode 100644 index 344eb6ad..00000000 Binary files a/experiments/qsp/W_g2_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_6.qspobj b/experiments/qsp/W_g2_8_6.qspobj deleted file mode 100644 index 92d1c3ed..00000000 Binary files a/experiments/qsp/W_g2_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_7.qspobj b/experiments/qsp/W_g2_8_7.qspobj deleted file mode 100644 index 186c0ed7..00000000 Binary files a/experiments/qsp/W_g2_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_8.qspobj b/experiments/qsp/W_g2_8_8.qspobj deleted file mode 100644 index 7c4e9f51..00000000 Binary files a/experiments/qsp/W_g2_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_8_9.qspobj b/experiments/qsp/W_g2_8_9.qspobj deleted file mode 100644 index be3c04ca..00000000 Binary files a/experiments/qsp/W_g2_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_1.qspobj b/experiments/qsp/W_g2_9_1.qspobj deleted file mode 100644 index 3c504153..00000000 Binary files a/experiments/qsp/W_g2_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_10.qspobj b/experiments/qsp/W_g2_9_10.qspobj deleted file mode 100644 index d8dafd9e..00000000 Binary files a/experiments/qsp/W_g2_9_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_2.qspobj b/experiments/qsp/W_g2_9_2.qspobj deleted file mode 100644 index 08e8c7f7..00000000 Binary files a/experiments/qsp/W_g2_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_3.qspobj b/experiments/qsp/W_g2_9_3.qspobj deleted file mode 100644 index 986e49ed..00000000 Binary files a/experiments/qsp/W_g2_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_4.qspobj b/experiments/qsp/W_g2_9_4.qspobj deleted file mode 100644 index fe18a2dc..00000000 Binary files a/experiments/qsp/W_g2_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_5.qspobj b/experiments/qsp/W_g2_9_5.qspobj deleted file mode 100644 index f2b2f113..00000000 Binary files a/experiments/qsp/W_g2_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_6.qspobj b/experiments/qsp/W_g2_9_6.qspobj deleted file mode 100644 index 2809f7f8..00000000 Binary files a/experiments/qsp/W_g2_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_7.qspobj b/experiments/qsp/W_g2_9_7.qspobj deleted file mode 100644 index 40d35e76..00000000 Binary files a/experiments/qsp/W_g2_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2_9_8.qspobj b/experiments/qsp/W_g2_9_8.qspobj deleted file mode 100644 index 33b9ae2b..00000000 Binary files a/experiments/qsp/W_g2_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_1.qspobj b/experiments/qsp/W_g2gn_3_1.qspobj deleted file mode 100644 index 5b131bc8..00000000 Binary files a/experiments/qsp/W_g2gn_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_10.qspobj b/experiments/qsp/W_g2gn_3_10.qspobj deleted file mode 100644 index f1b1506a..00000000 Binary files a/experiments/qsp/W_g2gn_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_2.qspobj b/experiments/qsp/W_g2gn_3_2.qspobj deleted file mode 100644 index 4dbcad70..00000000 Binary files a/experiments/qsp/W_g2gn_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_3.qspobj b/experiments/qsp/W_g2gn_3_3.qspobj deleted file mode 100644 index 33e6c7a5..00000000 Binary files a/experiments/qsp/W_g2gn_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_4.qspobj b/experiments/qsp/W_g2gn_3_4.qspobj deleted file mode 100644 index b0f26cb4..00000000 Binary files a/experiments/qsp/W_g2gn_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_5.qspobj b/experiments/qsp/W_g2gn_3_5.qspobj deleted file mode 100644 index 20322334..00000000 Binary files a/experiments/qsp/W_g2gn_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_6.qspobj b/experiments/qsp/W_g2gn_3_6.qspobj deleted file mode 100644 index a7f5b965..00000000 Binary files a/experiments/qsp/W_g2gn_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_7.qspobj b/experiments/qsp/W_g2gn_3_7.qspobj deleted file mode 100644 index 2f55aed5..00000000 Binary files a/experiments/qsp/W_g2gn_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_8.qspobj b/experiments/qsp/W_g2gn_3_8.qspobj deleted file mode 100644 index 910feddd..00000000 Binary files a/experiments/qsp/W_g2gn_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_3_9.qspobj b/experiments/qsp/W_g2gn_3_9.qspobj deleted file mode 100644 index b33c4662..00000000 Binary files a/experiments/qsp/W_g2gn_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_1.qspobj b/experiments/qsp/W_g2gn_4_1.qspobj deleted file mode 100644 index ab476dd9..00000000 Binary files a/experiments/qsp/W_g2gn_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_10.qspobj b/experiments/qsp/W_g2gn_4_10.qspobj deleted file mode 100644 index 2e8c8aa7..00000000 Binary files a/experiments/qsp/W_g2gn_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_2.qspobj b/experiments/qsp/W_g2gn_4_2.qspobj deleted file mode 100644 index 0f6b26e9..00000000 Binary files a/experiments/qsp/W_g2gn_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_3.qspobj b/experiments/qsp/W_g2gn_4_3.qspobj deleted file mode 100644 index a181cb19..00000000 Binary files a/experiments/qsp/W_g2gn_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_4.qspobj b/experiments/qsp/W_g2gn_4_4.qspobj deleted file mode 100644 index 2af273d8..00000000 Binary files a/experiments/qsp/W_g2gn_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_5.qspobj b/experiments/qsp/W_g2gn_4_5.qspobj deleted file mode 100644 index 97669948..00000000 Binary files a/experiments/qsp/W_g2gn_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_6.qspobj b/experiments/qsp/W_g2gn_4_6.qspobj deleted file mode 100644 index 9349f930..00000000 Binary files a/experiments/qsp/W_g2gn_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_7.qspobj b/experiments/qsp/W_g2gn_4_7.qspobj deleted file mode 100644 index c82e85a7..00000000 Binary files a/experiments/qsp/W_g2gn_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_8.qspobj b/experiments/qsp/W_g2gn_4_8.qspobj deleted file mode 100644 index 1d594352..00000000 Binary files a/experiments/qsp/W_g2gn_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_4_9.qspobj b/experiments/qsp/W_g2gn_4_9.qspobj deleted file mode 100644 index 696ce055..00000000 Binary files a/experiments/qsp/W_g2gn_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_1.qspobj b/experiments/qsp/W_g2gn_5_1.qspobj deleted file mode 100644 index 2b50f9ee..00000000 Binary files a/experiments/qsp/W_g2gn_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_10.qspobj b/experiments/qsp/W_g2gn_5_10.qspobj deleted file mode 100644 index 15510295..00000000 Binary files a/experiments/qsp/W_g2gn_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_2.qspobj b/experiments/qsp/W_g2gn_5_2.qspobj deleted file mode 100644 index cf0b2000..00000000 Binary files a/experiments/qsp/W_g2gn_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_3.qspobj b/experiments/qsp/W_g2gn_5_3.qspobj deleted file mode 100644 index 1376d8bc..00000000 Binary files a/experiments/qsp/W_g2gn_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_4.qspobj b/experiments/qsp/W_g2gn_5_4.qspobj deleted file mode 100644 index bc51eb87..00000000 Binary files a/experiments/qsp/W_g2gn_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_5.qspobj b/experiments/qsp/W_g2gn_5_5.qspobj deleted file mode 100644 index ac0b9b63..00000000 Binary files a/experiments/qsp/W_g2gn_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_6.qspobj b/experiments/qsp/W_g2gn_5_6.qspobj deleted file mode 100644 index a8f4587c..00000000 Binary files a/experiments/qsp/W_g2gn_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_7.qspobj b/experiments/qsp/W_g2gn_5_7.qspobj deleted file mode 100644 index 7f9d860e..00000000 Binary files a/experiments/qsp/W_g2gn_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_8.qspobj b/experiments/qsp/W_g2gn_5_8.qspobj deleted file mode 100644 index fc14d834..00000000 Binary files a/experiments/qsp/W_g2gn_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_5_9.qspobj b/experiments/qsp/W_g2gn_5_9.qspobj deleted file mode 100644 index 808dcd3b..00000000 Binary files a/experiments/qsp/W_g2gn_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_1.qspobj b/experiments/qsp/W_g2gn_6_1.qspobj deleted file mode 100644 index 799cc03f..00000000 Binary files a/experiments/qsp/W_g2gn_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_10.qspobj b/experiments/qsp/W_g2gn_6_10.qspobj deleted file mode 100644 index cf39b286..00000000 Binary files a/experiments/qsp/W_g2gn_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_2.qspobj b/experiments/qsp/W_g2gn_6_2.qspobj deleted file mode 100644 index ccba018c..00000000 Binary files a/experiments/qsp/W_g2gn_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_3.qspobj b/experiments/qsp/W_g2gn_6_3.qspobj deleted file mode 100644 index bac0d5b5..00000000 Binary files a/experiments/qsp/W_g2gn_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_4.qspobj b/experiments/qsp/W_g2gn_6_4.qspobj deleted file mode 100644 index b7778e1e..00000000 Binary files a/experiments/qsp/W_g2gn_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_5.qspobj b/experiments/qsp/W_g2gn_6_5.qspobj deleted file mode 100644 index a62d2ebd..00000000 Binary files a/experiments/qsp/W_g2gn_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_6.qspobj b/experiments/qsp/W_g2gn_6_6.qspobj deleted file mode 100644 index 95017bdd..00000000 Binary files a/experiments/qsp/W_g2gn_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_7.qspobj b/experiments/qsp/W_g2gn_6_7.qspobj deleted file mode 100644 index c0b3244c..00000000 Binary files a/experiments/qsp/W_g2gn_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_8.qspobj b/experiments/qsp/W_g2gn_6_8.qspobj deleted file mode 100644 index 27295886..00000000 Binary files a/experiments/qsp/W_g2gn_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_6_9.qspobj b/experiments/qsp/W_g2gn_6_9.qspobj deleted file mode 100644 index becb648d..00000000 Binary files a/experiments/qsp/W_g2gn_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_1.qspobj b/experiments/qsp/W_g2gn_7_1.qspobj deleted file mode 100644 index 2853495a..00000000 Binary files a/experiments/qsp/W_g2gn_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_10.qspobj b/experiments/qsp/W_g2gn_7_10.qspobj deleted file mode 100644 index 0d02dbec..00000000 Binary files a/experiments/qsp/W_g2gn_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_2.qspobj b/experiments/qsp/W_g2gn_7_2.qspobj deleted file mode 100644 index 3eb2362e..00000000 Binary files a/experiments/qsp/W_g2gn_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_3.qspobj b/experiments/qsp/W_g2gn_7_3.qspobj deleted file mode 100644 index 2bd77cbc..00000000 Binary files a/experiments/qsp/W_g2gn_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_4.qspobj b/experiments/qsp/W_g2gn_7_4.qspobj deleted file mode 100644 index cb1daeed..00000000 Binary files a/experiments/qsp/W_g2gn_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_5.qspobj b/experiments/qsp/W_g2gn_7_5.qspobj deleted file mode 100644 index 5facb0d2..00000000 Binary files a/experiments/qsp/W_g2gn_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_6.qspobj b/experiments/qsp/W_g2gn_7_6.qspobj deleted file mode 100644 index ecc0a83f..00000000 Binary files a/experiments/qsp/W_g2gn_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_7.qspobj b/experiments/qsp/W_g2gn_7_7.qspobj deleted file mode 100644 index 6b6c2e33..00000000 Binary files a/experiments/qsp/W_g2gn_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_8.qspobj b/experiments/qsp/W_g2gn_7_8.qspobj deleted file mode 100644 index 929e0ed7..00000000 Binary files a/experiments/qsp/W_g2gn_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_7_9.qspobj b/experiments/qsp/W_g2gn_7_9.qspobj deleted file mode 100644 index e9a6a450..00000000 Binary files a/experiments/qsp/W_g2gn_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_1.qspobj b/experiments/qsp/W_g2gn_8_1.qspobj deleted file mode 100644 index 77bd8ceb..00000000 Binary files a/experiments/qsp/W_g2gn_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_10.qspobj b/experiments/qsp/W_g2gn_8_10.qspobj deleted file mode 100644 index 3401bfa0..00000000 Binary files a/experiments/qsp/W_g2gn_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_2.qspobj b/experiments/qsp/W_g2gn_8_2.qspobj deleted file mode 100644 index f4419339..00000000 Binary files a/experiments/qsp/W_g2gn_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_3.qspobj b/experiments/qsp/W_g2gn_8_3.qspobj deleted file mode 100644 index d57d2164..00000000 Binary files a/experiments/qsp/W_g2gn_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_4.qspobj b/experiments/qsp/W_g2gn_8_4.qspobj deleted file mode 100644 index 18296a4a..00000000 Binary files a/experiments/qsp/W_g2gn_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_5.qspobj b/experiments/qsp/W_g2gn_8_5.qspobj deleted file mode 100644 index 6ce32ae0..00000000 Binary files a/experiments/qsp/W_g2gn_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_6.qspobj b/experiments/qsp/W_g2gn_8_6.qspobj deleted file mode 100644 index 812528bd..00000000 Binary files a/experiments/qsp/W_g2gn_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_7.qspobj b/experiments/qsp/W_g2gn_8_7.qspobj deleted file mode 100644 index 543dab70..00000000 Binary files a/experiments/qsp/W_g2gn_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_8.qspobj b/experiments/qsp/W_g2gn_8_8.qspobj deleted file mode 100644 index c4e206f3..00000000 Binary files a/experiments/qsp/W_g2gn_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_8_9.qspobj b/experiments/qsp/W_g2gn_8_9.qspobj deleted file mode 100644 index 0f21be18..00000000 Binary files a/experiments/qsp/W_g2gn_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_1.qspobj b/experiments/qsp/W_g2gn_9_1.qspobj deleted file mode 100644 index 7b7369be..00000000 Binary files a/experiments/qsp/W_g2gn_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_2.qspobj b/experiments/qsp/W_g2gn_9_2.qspobj deleted file mode 100644 index ad32e6ae..00000000 Binary files a/experiments/qsp/W_g2gn_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_3.qspobj b/experiments/qsp/W_g2gn_9_3.qspobj deleted file mode 100644 index 8398b399..00000000 Binary files a/experiments/qsp/W_g2gn_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_4.qspobj b/experiments/qsp/W_g2gn_9_4.qspobj deleted file mode 100644 index e17dd8d2..00000000 Binary files a/experiments/qsp/W_g2gn_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_5.qspobj b/experiments/qsp/W_g2gn_9_5.qspobj deleted file mode 100644 index 4364cf5e..00000000 Binary files a/experiments/qsp/W_g2gn_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_6.qspobj b/experiments/qsp/W_g2gn_9_6.qspobj deleted file mode 100644 index ac35ee69..00000000 Binary files a/experiments/qsp/W_g2gn_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_7.qspobj b/experiments/qsp/W_g2gn_9_7.qspobj deleted file mode 100644 index b536708d..00000000 Binary files a/experiments/qsp/W_g2gn_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_8.qspobj b/experiments/qsp/W_g2gn_9_8.qspobj deleted file mode 100644 index bfcfd719..00000000 Binary files a/experiments/qsp/W_g2gn_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gn_9_9.qspobj b/experiments/qsp/W_g2gn_9_9.qspobj deleted file mode 100644 index dbafcbab..00000000 Binary files a/experiments/qsp/W_g2gn_9_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_1.qspobj b/experiments/qsp/W_g2gnw_3_1.qspobj deleted file mode 100644 index c7665467..00000000 Binary files a/experiments/qsp/W_g2gnw_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_10.qspobj b/experiments/qsp/W_g2gnw_3_10.qspobj deleted file mode 100644 index ef3a8dcf..00000000 Binary files a/experiments/qsp/W_g2gnw_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_2.qspobj b/experiments/qsp/W_g2gnw_3_2.qspobj deleted file mode 100644 index e3b75eb8..00000000 Binary files a/experiments/qsp/W_g2gnw_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_3.qspobj b/experiments/qsp/W_g2gnw_3_3.qspobj deleted file mode 100644 index baad2c1d..00000000 Binary files a/experiments/qsp/W_g2gnw_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_4.qspobj b/experiments/qsp/W_g2gnw_3_4.qspobj deleted file mode 100644 index a115592d..00000000 Binary files a/experiments/qsp/W_g2gnw_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_5.qspobj b/experiments/qsp/W_g2gnw_3_5.qspobj deleted file mode 100644 index c99a3107..00000000 Binary files a/experiments/qsp/W_g2gnw_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_6.qspobj b/experiments/qsp/W_g2gnw_3_6.qspobj deleted file mode 100644 index a90b36a2..00000000 Binary files a/experiments/qsp/W_g2gnw_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_7.qspobj b/experiments/qsp/W_g2gnw_3_7.qspobj deleted file mode 100644 index bd2ad6e6..00000000 Binary files a/experiments/qsp/W_g2gnw_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_8.qspobj b/experiments/qsp/W_g2gnw_3_8.qspobj deleted file mode 100644 index e83c1a42..00000000 Binary files a/experiments/qsp/W_g2gnw_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_3_9.qspobj b/experiments/qsp/W_g2gnw_3_9.qspobj deleted file mode 100644 index 17e8dc7a..00000000 Binary files a/experiments/qsp/W_g2gnw_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_1.qspobj b/experiments/qsp/W_g2gnw_4_1.qspobj deleted file mode 100644 index 29436935..00000000 Binary files a/experiments/qsp/W_g2gnw_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_10.qspobj b/experiments/qsp/W_g2gnw_4_10.qspobj deleted file mode 100644 index a6ab4bba..00000000 Binary files a/experiments/qsp/W_g2gnw_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_2.qspobj b/experiments/qsp/W_g2gnw_4_2.qspobj deleted file mode 100644 index 78ce215f..00000000 Binary files a/experiments/qsp/W_g2gnw_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_3.qspobj b/experiments/qsp/W_g2gnw_4_3.qspobj deleted file mode 100644 index f8935da6..00000000 Binary files a/experiments/qsp/W_g2gnw_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_4.qspobj b/experiments/qsp/W_g2gnw_4_4.qspobj deleted file mode 100644 index 3295776f..00000000 Binary files a/experiments/qsp/W_g2gnw_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_5.qspobj b/experiments/qsp/W_g2gnw_4_5.qspobj deleted file mode 100644 index ecf3d0cd..00000000 Binary files a/experiments/qsp/W_g2gnw_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_6.qspobj b/experiments/qsp/W_g2gnw_4_6.qspobj deleted file mode 100644 index 8a7fda3e..00000000 Binary files a/experiments/qsp/W_g2gnw_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_7.qspobj b/experiments/qsp/W_g2gnw_4_7.qspobj deleted file mode 100644 index 5738841e..00000000 Binary files a/experiments/qsp/W_g2gnw_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_8.qspobj b/experiments/qsp/W_g2gnw_4_8.qspobj deleted file mode 100644 index cc1c2645..00000000 Binary files a/experiments/qsp/W_g2gnw_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_4_9.qspobj b/experiments/qsp/W_g2gnw_4_9.qspobj deleted file mode 100644 index 97e73e30..00000000 Binary files a/experiments/qsp/W_g2gnw_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_1.qspobj b/experiments/qsp/W_g2gnw_5_1.qspobj deleted file mode 100644 index f31ef335..00000000 Binary files a/experiments/qsp/W_g2gnw_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_10.qspobj b/experiments/qsp/W_g2gnw_5_10.qspobj deleted file mode 100644 index b5bbbd1c..00000000 Binary files a/experiments/qsp/W_g2gnw_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_2.qspobj b/experiments/qsp/W_g2gnw_5_2.qspobj deleted file mode 100644 index 27c0c177..00000000 Binary files a/experiments/qsp/W_g2gnw_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_3.qspobj b/experiments/qsp/W_g2gnw_5_3.qspobj deleted file mode 100644 index 0f0aa201..00000000 Binary files a/experiments/qsp/W_g2gnw_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_4.qspobj b/experiments/qsp/W_g2gnw_5_4.qspobj deleted file mode 100644 index 148ae538..00000000 Binary files a/experiments/qsp/W_g2gnw_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_5.qspobj b/experiments/qsp/W_g2gnw_5_5.qspobj deleted file mode 100644 index dccd30a2..00000000 Binary files a/experiments/qsp/W_g2gnw_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_6.qspobj b/experiments/qsp/W_g2gnw_5_6.qspobj deleted file mode 100644 index b5ac8819..00000000 Binary files a/experiments/qsp/W_g2gnw_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_7.qspobj b/experiments/qsp/W_g2gnw_5_7.qspobj deleted file mode 100644 index abc516e9..00000000 Binary files a/experiments/qsp/W_g2gnw_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_8.qspobj b/experiments/qsp/W_g2gnw_5_8.qspobj deleted file mode 100644 index df6a1c1e..00000000 Binary files a/experiments/qsp/W_g2gnw_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_5_9.qspobj b/experiments/qsp/W_g2gnw_5_9.qspobj deleted file mode 100644 index 9ccaa187..00000000 Binary files a/experiments/qsp/W_g2gnw_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_1.qspobj b/experiments/qsp/W_g2gnw_6_1.qspobj deleted file mode 100644 index 0eaf1ec0..00000000 Binary files a/experiments/qsp/W_g2gnw_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_10.qspobj b/experiments/qsp/W_g2gnw_6_10.qspobj deleted file mode 100644 index d81f0691..00000000 Binary files a/experiments/qsp/W_g2gnw_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_2.qspobj b/experiments/qsp/W_g2gnw_6_2.qspobj deleted file mode 100644 index a3ca20cf..00000000 Binary files a/experiments/qsp/W_g2gnw_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_3.qspobj b/experiments/qsp/W_g2gnw_6_3.qspobj deleted file mode 100644 index b6b04e56..00000000 Binary files a/experiments/qsp/W_g2gnw_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_4.qspobj b/experiments/qsp/W_g2gnw_6_4.qspobj deleted file mode 100644 index 45c62447..00000000 Binary files a/experiments/qsp/W_g2gnw_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_5.qspobj b/experiments/qsp/W_g2gnw_6_5.qspobj deleted file mode 100644 index 06605a89..00000000 Binary files a/experiments/qsp/W_g2gnw_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_6.qspobj b/experiments/qsp/W_g2gnw_6_6.qspobj deleted file mode 100644 index 20e16472..00000000 Binary files a/experiments/qsp/W_g2gnw_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_7.qspobj b/experiments/qsp/W_g2gnw_6_7.qspobj deleted file mode 100644 index 877ac382..00000000 Binary files a/experiments/qsp/W_g2gnw_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_8.qspobj b/experiments/qsp/W_g2gnw_6_8.qspobj deleted file mode 100644 index ac41e481..00000000 Binary files a/experiments/qsp/W_g2gnw_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_6_9.qspobj b/experiments/qsp/W_g2gnw_6_9.qspobj deleted file mode 100644 index 39040bd3..00000000 Binary files a/experiments/qsp/W_g2gnw_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_1.qspobj b/experiments/qsp/W_g2gnw_7_1.qspobj deleted file mode 100644 index db653391..00000000 Binary files a/experiments/qsp/W_g2gnw_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_10.qspobj b/experiments/qsp/W_g2gnw_7_10.qspobj deleted file mode 100644 index 6cf398e4..00000000 Binary files a/experiments/qsp/W_g2gnw_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_2.qspobj b/experiments/qsp/W_g2gnw_7_2.qspobj deleted file mode 100644 index 0fb9ae30..00000000 Binary files a/experiments/qsp/W_g2gnw_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_3.qspobj b/experiments/qsp/W_g2gnw_7_3.qspobj deleted file mode 100644 index a495be2d..00000000 Binary files a/experiments/qsp/W_g2gnw_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_4.qspobj b/experiments/qsp/W_g2gnw_7_4.qspobj deleted file mode 100644 index c32919c8..00000000 Binary files a/experiments/qsp/W_g2gnw_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_5.qspobj b/experiments/qsp/W_g2gnw_7_5.qspobj deleted file mode 100644 index f66f2e61..00000000 Binary files a/experiments/qsp/W_g2gnw_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_6.qspobj b/experiments/qsp/W_g2gnw_7_6.qspobj deleted file mode 100644 index 34ef88a8..00000000 Binary files a/experiments/qsp/W_g2gnw_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_7.qspobj b/experiments/qsp/W_g2gnw_7_7.qspobj deleted file mode 100644 index c198eb9f..00000000 Binary files a/experiments/qsp/W_g2gnw_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_8.qspobj b/experiments/qsp/W_g2gnw_7_8.qspobj deleted file mode 100644 index e4c76cdf..00000000 Binary files a/experiments/qsp/W_g2gnw_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_7_9.qspobj b/experiments/qsp/W_g2gnw_7_9.qspobj deleted file mode 100644 index 65d6c011..00000000 Binary files a/experiments/qsp/W_g2gnw_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_1.qspobj b/experiments/qsp/W_g2gnw_8_1.qspobj deleted file mode 100644 index cde570f3..00000000 Binary files a/experiments/qsp/W_g2gnw_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_10.qspobj b/experiments/qsp/W_g2gnw_8_10.qspobj deleted file mode 100644 index 433d2736..00000000 Binary files a/experiments/qsp/W_g2gnw_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_2.qspobj b/experiments/qsp/W_g2gnw_8_2.qspobj deleted file mode 100644 index 3ed0fd32..00000000 Binary files a/experiments/qsp/W_g2gnw_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_3.qspobj b/experiments/qsp/W_g2gnw_8_3.qspobj deleted file mode 100644 index c5dee52d..00000000 Binary files a/experiments/qsp/W_g2gnw_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_4.qspobj b/experiments/qsp/W_g2gnw_8_4.qspobj deleted file mode 100644 index 1ca345e7..00000000 Binary files a/experiments/qsp/W_g2gnw_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_5.qspobj b/experiments/qsp/W_g2gnw_8_5.qspobj deleted file mode 100644 index 1540ea1e..00000000 Binary files a/experiments/qsp/W_g2gnw_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_6.qspobj b/experiments/qsp/W_g2gnw_8_6.qspobj deleted file mode 100644 index d844f99c..00000000 Binary files a/experiments/qsp/W_g2gnw_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_7.qspobj b/experiments/qsp/W_g2gnw_8_7.qspobj deleted file mode 100644 index 16656a49..00000000 Binary files a/experiments/qsp/W_g2gnw_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_8.qspobj b/experiments/qsp/W_g2gnw_8_8.qspobj deleted file mode 100644 index 404e6581..00000000 Binary files a/experiments/qsp/W_g2gnw_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_8_9.qspobj b/experiments/qsp/W_g2gnw_8_9.qspobj deleted file mode 100644 index 844f26da..00000000 Binary files a/experiments/qsp/W_g2gnw_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_1.qspobj b/experiments/qsp/W_g2gnw_9_1.qspobj deleted file mode 100644 index f6b12d44..00000000 Binary files a/experiments/qsp/W_g2gnw_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_2.qspobj b/experiments/qsp/W_g2gnw_9_2.qspobj deleted file mode 100644 index 045bf8ba..00000000 Binary files a/experiments/qsp/W_g2gnw_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_3.qspobj b/experiments/qsp/W_g2gnw_9_3.qspobj deleted file mode 100644 index e4070943..00000000 Binary files a/experiments/qsp/W_g2gnw_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_4.qspobj b/experiments/qsp/W_g2gnw_9_4.qspobj deleted file mode 100644 index 0e0f7c52..00000000 Binary files a/experiments/qsp/W_g2gnw_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_5.qspobj b/experiments/qsp/W_g2gnw_9_5.qspobj deleted file mode 100644 index 16539f92..00000000 Binary files a/experiments/qsp/W_g2gnw_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_6.qspobj b/experiments/qsp/W_g2gnw_9_6.qspobj deleted file mode 100644 index c4936ac8..00000000 Binary files a/experiments/qsp/W_g2gnw_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_7.qspobj b/experiments/qsp/W_g2gnw_9_7.qspobj deleted file mode 100644 index 32b5494b..00000000 Binary files a/experiments/qsp/W_g2gnw_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_8.qspobj b/experiments/qsp/W_g2gnw_9_8.qspobj deleted file mode 100644 index ce49c659..00000000 Binary files a/experiments/qsp/W_g2gnw_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/W_g2gnw_9_9.qspobj b/experiments/qsp/W_g2gnw_9_9.qspobj deleted file mode 100644 index a9c43751..00000000 Binary files a/experiments/qsp/W_g2gnw_9_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ame_g2gn_3_2.qspobj b/experiments/qsp/ame_g2gn_3_2.qspobj deleted file mode 100644 index 8f40c733..00000000 Binary files a/experiments/qsp/ame_g2gn_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_1.qspobj b/experiments/qsp/ghz_g2_3_1.qspobj deleted file mode 100644 index 4049b59b..00000000 Binary files a/experiments/qsp/ghz_g2_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_10.qspobj b/experiments/qsp/ghz_g2_3_10.qspobj deleted file mode 100644 index ea925d72..00000000 Binary files a/experiments/qsp/ghz_g2_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_2.qspobj b/experiments/qsp/ghz_g2_3_2.qspobj deleted file mode 100644 index fe60dfde..00000000 Binary files a/experiments/qsp/ghz_g2_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_3.qspobj b/experiments/qsp/ghz_g2_3_3.qspobj deleted file mode 100644 index 22261b05..00000000 Binary files a/experiments/qsp/ghz_g2_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_4.qspobj b/experiments/qsp/ghz_g2_3_4.qspobj deleted file mode 100644 index 122436fb..00000000 Binary files a/experiments/qsp/ghz_g2_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_5.qspobj b/experiments/qsp/ghz_g2_3_5.qspobj deleted file mode 100644 index 16555109..00000000 Binary files a/experiments/qsp/ghz_g2_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_6.qspobj b/experiments/qsp/ghz_g2_3_6.qspobj deleted file mode 100644 index 3cbd1016..00000000 Binary files a/experiments/qsp/ghz_g2_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_7.qspobj b/experiments/qsp/ghz_g2_3_7.qspobj deleted file mode 100644 index fd8e8359..00000000 Binary files a/experiments/qsp/ghz_g2_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_8.qspobj b/experiments/qsp/ghz_g2_3_8.qspobj deleted file mode 100644 index a38a8d86..00000000 Binary files a/experiments/qsp/ghz_g2_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_3_9.qspobj b/experiments/qsp/ghz_g2_3_9.qspobj deleted file mode 100644 index b8ab60c7..00000000 Binary files a/experiments/qsp/ghz_g2_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_1.qspobj b/experiments/qsp/ghz_g2_4_1.qspobj deleted file mode 100644 index 7c6ae9d8..00000000 Binary files a/experiments/qsp/ghz_g2_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_10.qspobj b/experiments/qsp/ghz_g2_4_10.qspobj deleted file mode 100644 index bc0c05e3..00000000 Binary files a/experiments/qsp/ghz_g2_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_2.qspobj b/experiments/qsp/ghz_g2_4_2.qspobj deleted file mode 100644 index 94603482..00000000 Binary files a/experiments/qsp/ghz_g2_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_3.qspobj b/experiments/qsp/ghz_g2_4_3.qspobj deleted file mode 100644 index ac5517ae..00000000 Binary files a/experiments/qsp/ghz_g2_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_4.qspobj b/experiments/qsp/ghz_g2_4_4.qspobj deleted file mode 100644 index 7f43e34c..00000000 Binary files a/experiments/qsp/ghz_g2_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_5.qspobj b/experiments/qsp/ghz_g2_4_5.qspobj deleted file mode 100644 index 7de6b3df..00000000 Binary files a/experiments/qsp/ghz_g2_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_6.qspobj b/experiments/qsp/ghz_g2_4_6.qspobj deleted file mode 100644 index ecc90252..00000000 Binary files a/experiments/qsp/ghz_g2_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_7.qspobj b/experiments/qsp/ghz_g2_4_7.qspobj deleted file mode 100644 index 3e7952ad..00000000 Binary files a/experiments/qsp/ghz_g2_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_8.qspobj b/experiments/qsp/ghz_g2_4_8.qspobj deleted file mode 100644 index c029ba70..00000000 Binary files a/experiments/qsp/ghz_g2_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_4_9.qspobj b/experiments/qsp/ghz_g2_4_9.qspobj deleted file mode 100644 index 5ba1a12c..00000000 Binary files a/experiments/qsp/ghz_g2_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_1.qspobj b/experiments/qsp/ghz_g2_5_1.qspobj deleted file mode 100644 index d4ac6b86..00000000 Binary files a/experiments/qsp/ghz_g2_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_10.qspobj b/experiments/qsp/ghz_g2_5_10.qspobj deleted file mode 100644 index ef14222b..00000000 Binary files a/experiments/qsp/ghz_g2_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_2.qspobj b/experiments/qsp/ghz_g2_5_2.qspobj deleted file mode 100644 index 2bd3fbde..00000000 Binary files a/experiments/qsp/ghz_g2_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_3.qspobj b/experiments/qsp/ghz_g2_5_3.qspobj deleted file mode 100644 index 276d2f4b..00000000 Binary files a/experiments/qsp/ghz_g2_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_4.qspobj b/experiments/qsp/ghz_g2_5_4.qspobj deleted file mode 100644 index 9850b835..00000000 Binary files a/experiments/qsp/ghz_g2_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_5.qspobj b/experiments/qsp/ghz_g2_5_5.qspobj deleted file mode 100644 index 9edff528..00000000 Binary files a/experiments/qsp/ghz_g2_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_6.qspobj b/experiments/qsp/ghz_g2_5_6.qspobj deleted file mode 100644 index ba74d8f2..00000000 Binary files a/experiments/qsp/ghz_g2_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_7.qspobj b/experiments/qsp/ghz_g2_5_7.qspobj deleted file mode 100644 index 0ba30f78..00000000 Binary files a/experiments/qsp/ghz_g2_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_8.qspobj b/experiments/qsp/ghz_g2_5_8.qspobj deleted file mode 100644 index 1b92b2f8..00000000 Binary files a/experiments/qsp/ghz_g2_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_5_9.qspobj b/experiments/qsp/ghz_g2_5_9.qspobj deleted file mode 100644 index f2a348f4..00000000 Binary files a/experiments/qsp/ghz_g2_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_1.qspobj b/experiments/qsp/ghz_g2_6_1.qspobj deleted file mode 100644 index d8c99f7b..00000000 Binary files a/experiments/qsp/ghz_g2_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_10.qspobj b/experiments/qsp/ghz_g2_6_10.qspobj deleted file mode 100644 index 95d10ba7..00000000 Binary files a/experiments/qsp/ghz_g2_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_2.qspobj b/experiments/qsp/ghz_g2_6_2.qspobj deleted file mode 100644 index 3d6cc306..00000000 Binary files a/experiments/qsp/ghz_g2_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_3.qspobj b/experiments/qsp/ghz_g2_6_3.qspobj deleted file mode 100644 index 9304ff22..00000000 Binary files a/experiments/qsp/ghz_g2_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_4.qspobj b/experiments/qsp/ghz_g2_6_4.qspobj deleted file mode 100644 index 8d260051..00000000 Binary files a/experiments/qsp/ghz_g2_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_5.qspobj b/experiments/qsp/ghz_g2_6_5.qspobj deleted file mode 100644 index 07f965e3..00000000 Binary files a/experiments/qsp/ghz_g2_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_6.qspobj b/experiments/qsp/ghz_g2_6_6.qspobj deleted file mode 100644 index 64365e8c..00000000 Binary files a/experiments/qsp/ghz_g2_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_7.qspobj b/experiments/qsp/ghz_g2_6_7.qspobj deleted file mode 100644 index b074f4c2..00000000 Binary files a/experiments/qsp/ghz_g2_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_8.qspobj b/experiments/qsp/ghz_g2_6_8.qspobj deleted file mode 100644 index 9ac685f0..00000000 Binary files a/experiments/qsp/ghz_g2_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_6_9.qspobj b/experiments/qsp/ghz_g2_6_9.qspobj deleted file mode 100644 index cbd7e3c2..00000000 Binary files a/experiments/qsp/ghz_g2_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_1.qspobj b/experiments/qsp/ghz_g2_7_1.qspobj deleted file mode 100644 index 472760ca..00000000 Binary files a/experiments/qsp/ghz_g2_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_10.qspobj b/experiments/qsp/ghz_g2_7_10.qspobj deleted file mode 100644 index 86117cb5..00000000 Binary files a/experiments/qsp/ghz_g2_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_2.qspobj b/experiments/qsp/ghz_g2_7_2.qspobj deleted file mode 100644 index 8a921ecd..00000000 Binary files a/experiments/qsp/ghz_g2_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_3.qspobj b/experiments/qsp/ghz_g2_7_3.qspobj deleted file mode 100644 index da194ae3..00000000 Binary files a/experiments/qsp/ghz_g2_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_4.qspobj b/experiments/qsp/ghz_g2_7_4.qspobj deleted file mode 100644 index 56500600..00000000 Binary files a/experiments/qsp/ghz_g2_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_5.qspobj b/experiments/qsp/ghz_g2_7_5.qspobj deleted file mode 100644 index 0b420254..00000000 Binary files a/experiments/qsp/ghz_g2_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_6.qspobj b/experiments/qsp/ghz_g2_7_6.qspobj deleted file mode 100644 index 17bbc484..00000000 Binary files a/experiments/qsp/ghz_g2_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_7.qspobj b/experiments/qsp/ghz_g2_7_7.qspobj deleted file mode 100644 index a1743407..00000000 Binary files a/experiments/qsp/ghz_g2_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_8.qspobj b/experiments/qsp/ghz_g2_7_8.qspobj deleted file mode 100644 index b50ecfa7..00000000 Binary files a/experiments/qsp/ghz_g2_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_7_9.qspobj b/experiments/qsp/ghz_g2_7_9.qspobj deleted file mode 100644 index dc73ec28..00000000 Binary files a/experiments/qsp/ghz_g2_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_1.qspobj b/experiments/qsp/ghz_g2_8_1.qspobj deleted file mode 100644 index 2f2c5105..00000000 Binary files a/experiments/qsp/ghz_g2_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_10.qspobj b/experiments/qsp/ghz_g2_8_10.qspobj deleted file mode 100644 index 42679174..00000000 Binary files a/experiments/qsp/ghz_g2_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_2.qspobj b/experiments/qsp/ghz_g2_8_2.qspobj deleted file mode 100644 index fdfb9b7b..00000000 Binary files a/experiments/qsp/ghz_g2_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_3.qspobj b/experiments/qsp/ghz_g2_8_3.qspobj deleted file mode 100644 index a9460d79..00000000 Binary files a/experiments/qsp/ghz_g2_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_4.qspobj b/experiments/qsp/ghz_g2_8_4.qspobj deleted file mode 100644 index 09df07d1..00000000 Binary files a/experiments/qsp/ghz_g2_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_5.qspobj b/experiments/qsp/ghz_g2_8_5.qspobj deleted file mode 100644 index b698193c..00000000 Binary files a/experiments/qsp/ghz_g2_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_6.qspobj b/experiments/qsp/ghz_g2_8_6.qspobj deleted file mode 100644 index 1414acb5..00000000 Binary files a/experiments/qsp/ghz_g2_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_7.qspobj b/experiments/qsp/ghz_g2_8_7.qspobj deleted file mode 100644 index a237536e..00000000 Binary files a/experiments/qsp/ghz_g2_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_8.qspobj b/experiments/qsp/ghz_g2_8_8.qspobj deleted file mode 100644 index 8f5e9a1f..00000000 Binary files a/experiments/qsp/ghz_g2_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_8_9.qspobj b/experiments/qsp/ghz_g2_8_9.qspobj deleted file mode 100644 index 60618f4b..00000000 Binary files a/experiments/qsp/ghz_g2_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_1.qspobj b/experiments/qsp/ghz_g2_9_1.qspobj deleted file mode 100644 index 25517f13..00000000 Binary files a/experiments/qsp/ghz_g2_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_10.qspobj b/experiments/qsp/ghz_g2_9_10.qspobj deleted file mode 100644 index 7b475416..00000000 Binary files a/experiments/qsp/ghz_g2_9_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_2.qspobj b/experiments/qsp/ghz_g2_9_2.qspobj deleted file mode 100644 index 47bd1878..00000000 Binary files a/experiments/qsp/ghz_g2_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_3.qspobj b/experiments/qsp/ghz_g2_9_3.qspobj deleted file mode 100644 index 7bd14b31..00000000 Binary files a/experiments/qsp/ghz_g2_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_4.qspobj b/experiments/qsp/ghz_g2_9_4.qspobj deleted file mode 100644 index 82d7fc24..00000000 Binary files a/experiments/qsp/ghz_g2_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_5.qspobj b/experiments/qsp/ghz_g2_9_5.qspobj deleted file mode 100644 index 97afbccf..00000000 Binary files a/experiments/qsp/ghz_g2_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_6.qspobj b/experiments/qsp/ghz_g2_9_6.qspobj deleted file mode 100644 index 098e44db..00000000 Binary files a/experiments/qsp/ghz_g2_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_7.qspobj b/experiments/qsp/ghz_g2_9_7.qspobj deleted file mode 100644 index b70d4f9e..00000000 Binary files a/experiments/qsp/ghz_g2_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2_9_8.qspobj b/experiments/qsp/ghz_g2_9_8.qspobj deleted file mode 100644 index c6493587..00000000 Binary files a/experiments/qsp/ghz_g2_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_10_3.qspobj b/experiments/qsp/ghz_g2gn_10_3.qspobj deleted file mode 100644 index 079e5f6e..00000000 Binary files a/experiments/qsp/ghz_g2gn_10_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_10_8.qspobj b/experiments/qsp/ghz_g2gn_10_8.qspobj deleted file mode 100644 index 5275524c..00000000 Binary files a/experiments/qsp/ghz_g2gn_10_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_1.qspobj b/experiments/qsp/ghz_g2gn_3_1.qspobj deleted file mode 100644 index 4cadf0d5..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_10.qspobj b/experiments/qsp/ghz_g2gn_3_10.qspobj deleted file mode 100644 index fa9de57f..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_2.qspobj b/experiments/qsp/ghz_g2gn_3_2.qspobj deleted file mode 100644 index 81b8a11a..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_3.qspobj b/experiments/qsp/ghz_g2gn_3_3.qspobj deleted file mode 100644 index 822e6aca..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_4.qspobj b/experiments/qsp/ghz_g2gn_3_4.qspobj deleted file mode 100644 index e075494a..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_5.qspobj b/experiments/qsp/ghz_g2gn_3_5.qspobj deleted file mode 100644 index 27a525a4..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_6.qspobj b/experiments/qsp/ghz_g2gn_3_6.qspobj deleted file mode 100644 index 1e55ff9e..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_7.qspobj b/experiments/qsp/ghz_g2gn_3_7.qspobj deleted file mode 100644 index 654b98ad..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_8.qspobj b/experiments/qsp/ghz_g2gn_3_8.qspobj deleted file mode 100644 index 5b91a18f..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_3_9.qspobj b/experiments/qsp/ghz_g2gn_3_9.qspobj deleted file mode 100644 index 83055ea1..00000000 Binary files a/experiments/qsp/ghz_g2gn_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_1.qspobj b/experiments/qsp/ghz_g2gn_4_1.qspobj deleted file mode 100644 index e8578f36..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_10.qspobj b/experiments/qsp/ghz_g2gn_4_10.qspobj deleted file mode 100644 index ae7cdcb6..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_2.qspobj b/experiments/qsp/ghz_g2gn_4_2.qspobj deleted file mode 100644 index 7ee4c9f0..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_3.qspobj b/experiments/qsp/ghz_g2gn_4_3.qspobj deleted file mode 100644 index 4712389d..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_4.qspobj b/experiments/qsp/ghz_g2gn_4_4.qspobj deleted file mode 100644 index e1cec899..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_5.qspobj b/experiments/qsp/ghz_g2gn_4_5.qspobj deleted file mode 100644 index f033159e..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_6.qspobj b/experiments/qsp/ghz_g2gn_4_6.qspobj deleted file mode 100644 index 70586530..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_7.qspobj b/experiments/qsp/ghz_g2gn_4_7.qspobj deleted file mode 100644 index 91d23b69..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_8.qspobj b/experiments/qsp/ghz_g2gn_4_8.qspobj deleted file mode 100644 index 7ad6e73b..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_4_9.qspobj b/experiments/qsp/ghz_g2gn_4_9.qspobj deleted file mode 100644 index f7bdee52..00000000 Binary files a/experiments/qsp/ghz_g2gn_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_1.qspobj b/experiments/qsp/ghz_g2gn_5_1.qspobj deleted file mode 100644 index 7db907cc..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_10.qspobj b/experiments/qsp/ghz_g2gn_5_10.qspobj deleted file mode 100644 index bd497a16..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_2.qspobj b/experiments/qsp/ghz_g2gn_5_2.qspobj deleted file mode 100644 index cbfff6d3..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_3.qspobj b/experiments/qsp/ghz_g2gn_5_3.qspobj deleted file mode 100644 index 9a66053d..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_4.qspobj b/experiments/qsp/ghz_g2gn_5_4.qspobj deleted file mode 100644 index aed29833..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_5.qspobj b/experiments/qsp/ghz_g2gn_5_5.qspobj deleted file mode 100644 index d8d004c2..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_6.qspobj b/experiments/qsp/ghz_g2gn_5_6.qspobj deleted file mode 100644 index 0f0397d4..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_7.qspobj b/experiments/qsp/ghz_g2gn_5_7.qspobj deleted file mode 100644 index 6178ef20..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_8.qspobj b/experiments/qsp/ghz_g2gn_5_8.qspobj deleted file mode 100644 index ef417f13..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_5_9.qspobj b/experiments/qsp/ghz_g2gn_5_9.qspobj deleted file mode 100644 index 688a20f8..00000000 Binary files a/experiments/qsp/ghz_g2gn_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_1.qspobj b/experiments/qsp/ghz_g2gn_6_1.qspobj deleted file mode 100644 index 59e2a348..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_10.qspobj b/experiments/qsp/ghz_g2gn_6_10.qspobj deleted file mode 100644 index afdda9b0..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_2.qspobj b/experiments/qsp/ghz_g2gn_6_2.qspobj deleted file mode 100644 index d57728ae..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_3.qspobj b/experiments/qsp/ghz_g2gn_6_3.qspobj deleted file mode 100644 index 39af19cb..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_4.qspobj b/experiments/qsp/ghz_g2gn_6_4.qspobj deleted file mode 100644 index 2145d2b2..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_5.qspobj b/experiments/qsp/ghz_g2gn_6_5.qspobj deleted file mode 100644 index 231c5f66..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_6.qspobj b/experiments/qsp/ghz_g2gn_6_6.qspobj deleted file mode 100644 index 1804e0bd..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_7.qspobj b/experiments/qsp/ghz_g2gn_6_7.qspobj deleted file mode 100644 index cfe5ba83..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_8.qspobj b/experiments/qsp/ghz_g2gn_6_8.qspobj deleted file mode 100644 index 065d30c6..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_6_9.qspobj b/experiments/qsp/ghz_g2gn_6_9.qspobj deleted file mode 100644 index ff06899b..00000000 Binary files a/experiments/qsp/ghz_g2gn_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_1.qspobj b/experiments/qsp/ghz_g2gn_7_1.qspobj deleted file mode 100644 index 53054d7e..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_10.qspobj b/experiments/qsp/ghz_g2gn_7_10.qspobj deleted file mode 100644 index 35f9addf..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_2.qspobj b/experiments/qsp/ghz_g2gn_7_2.qspobj deleted file mode 100644 index d9be8c8c..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_3.qspobj b/experiments/qsp/ghz_g2gn_7_3.qspobj deleted file mode 100644 index 8c9ef825..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_4.qspobj b/experiments/qsp/ghz_g2gn_7_4.qspobj deleted file mode 100644 index fdcd5390..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_5.qspobj b/experiments/qsp/ghz_g2gn_7_5.qspobj deleted file mode 100644 index d9d5411e..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_6.qspobj b/experiments/qsp/ghz_g2gn_7_6.qspobj deleted file mode 100644 index c75c296c..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_7.qspobj b/experiments/qsp/ghz_g2gn_7_7.qspobj deleted file mode 100644 index d6a5daa6..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_8.qspobj b/experiments/qsp/ghz_g2gn_7_8.qspobj deleted file mode 100644 index 327add38..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_7_9.qspobj b/experiments/qsp/ghz_g2gn_7_9.qspobj deleted file mode 100644 index 43f3a5bc..00000000 Binary files a/experiments/qsp/ghz_g2gn_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_1.qspobj b/experiments/qsp/ghz_g2gn_8_1.qspobj deleted file mode 100644 index 50dbe5d2..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_10.qspobj b/experiments/qsp/ghz_g2gn_8_10.qspobj deleted file mode 100644 index f6fe0cbb..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_2.qspobj b/experiments/qsp/ghz_g2gn_8_2.qspobj deleted file mode 100644 index 63d5ccce..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_3.qspobj b/experiments/qsp/ghz_g2gn_8_3.qspobj deleted file mode 100644 index c925b548..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_4.qspobj b/experiments/qsp/ghz_g2gn_8_4.qspobj deleted file mode 100644 index d5565752..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_5.qspobj b/experiments/qsp/ghz_g2gn_8_5.qspobj deleted file mode 100644 index 4be616a4..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_6.qspobj b/experiments/qsp/ghz_g2gn_8_6.qspobj deleted file mode 100644 index b64632b5..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_7.qspobj b/experiments/qsp/ghz_g2gn_8_7.qspobj deleted file mode 100644 index 74b3eb8f..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_8.qspobj b/experiments/qsp/ghz_g2gn_8_8.qspobj deleted file mode 100644 index 95a755c9..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_8_9.qspobj b/experiments/qsp/ghz_g2gn_8_9.qspobj deleted file mode 100644 index ff07c37a..00000000 Binary files a/experiments/qsp/ghz_g2gn_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_1.qspobj b/experiments/qsp/ghz_g2gn_9_1.qspobj deleted file mode 100644 index 0b90b5c1..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_2.qspobj b/experiments/qsp/ghz_g2gn_9_2.qspobj deleted file mode 100644 index d90dafc5..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_3.qspobj b/experiments/qsp/ghz_g2gn_9_3.qspobj deleted file mode 100644 index ee801ba0..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_4.qspobj b/experiments/qsp/ghz_g2gn_9_4.qspobj deleted file mode 100644 index 5b636e41..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_5.qspobj b/experiments/qsp/ghz_g2gn_9_5.qspobj deleted file mode 100644 index c0ea51b2..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_6.qspobj b/experiments/qsp/ghz_g2gn_9_6.qspobj deleted file mode 100644 index 6ca3fc37..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_7.qspobj b/experiments/qsp/ghz_g2gn_9_7.qspobj deleted file mode 100644 index 0c1a3b9b..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_8.qspobj b/experiments/qsp/ghz_g2gn_9_8.qspobj deleted file mode 100644 index a83fb167..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gn_9_9.qspobj b/experiments/qsp/ghz_g2gn_9_9.qspobj deleted file mode 100644 index a92b43aa..00000000 Binary files a/experiments/qsp/ghz_g2gn_9_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_1.qspobj b/experiments/qsp/ghz_g2gnw_3_1.qspobj deleted file mode 100644 index 8801cbf7..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_10.qspobj b/experiments/qsp/ghz_g2gnw_3_10.qspobj deleted file mode 100644 index bea92913..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_2.qspobj b/experiments/qsp/ghz_g2gnw_3_2.qspobj deleted file mode 100644 index 6d0512a5..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_3.qspobj b/experiments/qsp/ghz_g2gnw_3_3.qspobj deleted file mode 100644 index b996322b..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_4.qspobj b/experiments/qsp/ghz_g2gnw_3_4.qspobj deleted file mode 100644 index 26a57d39..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_5.qspobj b/experiments/qsp/ghz_g2gnw_3_5.qspobj deleted file mode 100644 index 5763ceef..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_6.qspobj b/experiments/qsp/ghz_g2gnw_3_6.qspobj deleted file mode 100644 index 4907244b..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_7.qspobj b/experiments/qsp/ghz_g2gnw_3_7.qspobj deleted file mode 100644 index 5f302459..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_8.qspobj b/experiments/qsp/ghz_g2gnw_3_8.qspobj deleted file mode 100644 index b91588ef..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_3_9.qspobj b/experiments/qsp/ghz_g2gnw_3_9.qspobj deleted file mode 100644 index 5aac028d..00000000 Binary files a/experiments/qsp/ghz_g2gnw_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_1.qspobj b/experiments/qsp/ghz_g2gnw_4_1.qspobj deleted file mode 100644 index 2f6502cb..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_10.qspobj b/experiments/qsp/ghz_g2gnw_4_10.qspobj deleted file mode 100644 index 6a171e7c..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_2.qspobj b/experiments/qsp/ghz_g2gnw_4_2.qspobj deleted file mode 100644 index d3fc7fed..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_3.qspobj b/experiments/qsp/ghz_g2gnw_4_3.qspobj deleted file mode 100644 index 8f8b9957..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_4.qspobj b/experiments/qsp/ghz_g2gnw_4_4.qspobj deleted file mode 100644 index 3d98546d..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_5.qspobj b/experiments/qsp/ghz_g2gnw_4_5.qspobj deleted file mode 100644 index 55218d0f..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_6.qspobj b/experiments/qsp/ghz_g2gnw_4_6.qspobj deleted file mode 100644 index 196ef9f9..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_7.qspobj b/experiments/qsp/ghz_g2gnw_4_7.qspobj deleted file mode 100644 index 6a776694..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_8.qspobj b/experiments/qsp/ghz_g2gnw_4_8.qspobj deleted file mode 100644 index fc01a68c..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_4_9.qspobj b/experiments/qsp/ghz_g2gnw_4_9.qspobj deleted file mode 100644 index 0049c086..00000000 Binary files a/experiments/qsp/ghz_g2gnw_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_1.qspobj b/experiments/qsp/ghz_g2gnw_5_1.qspobj deleted file mode 100644 index 9ce4aad0..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_10.qspobj b/experiments/qsp/ghz_g2gnw_5_10.qspobj deleted file mode 100644 index 33855830..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_2.qspobj b/experiments/qsp/ghz_g2gnw_5_2.qspobj deleted file mode 100644 index 3b4631c3..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_3.qspobj b/experiments/qsp/ghz_g2gnw_5_3.qspobj deleted file mode 100644 index 13fe32ba..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_4.qspobj b/experiments/qsp/ghz_g2gnw_5_4.qspobj deleted file mode 100644 index 11c8cf3a..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_5.qspobj b/experiments/qsp/ghz_g2gnw_5_5.qspobj deleted file mode 100644 index f0d6a885..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_6.qspobj b/experiments/qsp/ghz_g2gnw_5_6.qspobj deleted file mode 100644 index f5863914..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_7.qspobj b/experiments/qsp/ghz_g2gnw_5_7.qspobj deleted file mode 100644 index b271c9e8..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_8.qspobj b/experiments/qsp/ghz_g2gnw_5_8.qspobj deleted file mode 100644 index 709dd81b..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_5_9.qspobj b/experiments/qsp/ghz_g2gnw_5_9.qspobj deleted file mode 100644 index 612c618a..00000000 Binary files a/experiments/qsp/ghz_g2gnw_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_1.qspobj b/experiments/qsp/ghz_g2gnw_6_1.qspobj deleted file mode 100644 index f927d3d4..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_10.qspobj b/experiments/qsp/ghz_g2gnw_6_10.qspobj deleted file mode 100644 index ad6daba6..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_2.qspobj b/experiments/qsp/ghz_g2gnw_6_2.qspobj deleted file mode 100644 index 5cdd4743..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_3.qspobj b/experiments/qsp/ghz_g2gnw_6_3.qspobj deleted file mode 100644 index 9f9fffbb..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_4.qspobj b/experiments/qsp/ghz_g2gnw_6_4.qspobj deleted file mode 100644 index 6cac9ea4..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_5.qspobj b/experiments/qsp/ghz_g2gnw_6_5.qspobj deleted file mode 100644 index 55f61ad9..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_6.qspobj b/experiments/qsp/ghz_g2gnw_6_6.qspobj deleted file mode 100644 index 30891688..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_7.qspobj b/experiments/qsp/ghz_g2gnw_6_7.qspobj deleted file mode 100644 index f763376a..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_8.qspobj b/experiments/qsp/ghz_g2gnw_6_8.qspobj deleted file mode 100644 index 5751bbc1..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_6_9.qspobj b/experiments/qsp/ghz_g2gnw_6_9.qspobj deleted file mode 100644 index 00b506f3..00000000 Binary files a/experiments/qsp/ghz_g2gnw_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_1.qspobj b/experiments/qsp/ghz_g2gnw_7_1.qspobj deleted file mode 100644 index 2b1454e6..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_10.qspobj b/experiments/qsp/ghz_g2gnw_7_10.qspobj deleted file mode 100644 index 4f73253c..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_2.qspobj b/experiments/qsp/ghz_g2gnw_7_2.qspobj deleted file mode 100644 index 508bdc1c..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_3.qspobj b/experiments/qsp/ghz_g2gnw_7_3.qspobj deleted file mode 100644 index 4107471f..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_4.qspobj b/experiments/qsp/ghz_g2gnw_7_4.qspobj deleted file mode 100644 index f3a0358b..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_5.qspobj b/experiments/qsp/ghz_g2gnw_7_5.qspobj deleted file mode 100644 index b2e5e267..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_6.qspobj b/experiments/qsp/ghz_g2gnw_7_6.qspobj deleted file mode 100644 index 1f68939c..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_7.qspobj b/experiments/qsp/ghz_g2gnw_7_7.qspobj deleted file mode 100644 index 8f878f13..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_8.qspobj b/experiments/qsp/ghz_g2gnw_7_8.qspobj deleted file mode 100644 index 2c3a6025..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_7_9.qspobj b/experiments/qsp/ghz_g2gnw_7_9.qspobj deleted file mode 100644 index b8097351..00000000 Binary files a/experiments/qsp/ghz_g2gnw_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_1.qspobj b/experiments/qsp/ghz_g2gnw_8_1.qspobj deleted file mode 100644 index b1436b0f..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_10.qspobj b/experiments/qsp/ghz_g2gnw_8_10.qspobj deleted file mode 100644 index 9b10ec04..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_2.qspobj b/experiments/qsp/ghz_g2gnw_8_2.qspobj deleted file mode 100644 index c0960d26..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_3.qspobj b/experiments/qsp/ghz_g2gnw_8_3.qspobj deleted file mode 100644 index 56ee2643..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_4.qspobj b/experiments/qsp/ghz_g2gnw_8_4.qspobj deleted file mode 100644 index f33ad95d..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_5.qspobj b/experiments/qsp/ghz_g2gnw_8_5.qspobj deleted file mode 100644 index cb14131f..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_6.qspobj b/experiments/qsp/ghz_g2gnw_8_6.qspobj deleted file mode 100644 index c9fda87d..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_7.qspobj b/experiments/qsp/ghz_g2gnw_8_7.qspobj deleted file mode 100644 index 630b8320..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_8.qspobj b/experiments/qsp/ghz_g2gnw_8_8.qspobj deleted file mode 100644 index c740af65..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_8_9.qspobj b/experiments/qsp/ghz_g2gnw_8_9.qspobj deleted file mode 100644 index 369a4d6b..00000000 Binary files a/experiments/qsp/ghz_g2gnw_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_1.qspobj b/experiments/qsp/ghz_g2gnw_9_1.qspobj deleted file mode 100644 index a2381368..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_2.qspobj b/experiments/qsp/ghz_g2gnw_9_2.qspobj deleted file mode 100644 index 23a777a6..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_3.qspobj b/experiments/qsp/ghz_g2gnw_9_3.qspobj deleted file mode 100644 index bbc9bac8..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_4.qspobj b/experiments/qsp/ghz_g2gnw_9_4.qspobj deleted file mode 100644 index 1ee21fa6..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_5.qspobj b/experiments/qsp/ghz_g2gnw_9_5.qspobj deleted file mode 100644 index 53668f58..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_6.qspobj b/experiments/qsp/ghz_g2gnw_9_6.qspobj deleted file mode 100644 index 5c5f1b23..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_7.qspobj b/experiments/qsp/ghz_g2gnw_9_7.qspobj deleted file mode 100644 index fc70003e..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_8.qspobj b/experiments/qsp/ghz_g2gnw_9_8.qspobj deleted file mode 100644 index 028dd8d5..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/ghz_g2gnw_9_9.qspobj b/experiments/qsp/ghz_g2gnw_9_9.qspobj deleted file mode 100644 index 8cbb021b..00000000 Binary files a/experiments/qsp/ghz_g2gnw_9_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_1.qspobj b/experiments/qsp/haar_g2_3_1.qspobj deleted file mode 100644 index 50dc8176..00000000 Binary files a/experiments/qsp/haar_g2_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_10.qspobj b/experiments/qsp/haar_g2_3_10.qspobj deleted file mode 100644 index f01e3fd2..00000000 Binary files a/experiments/qsp/haar_g2_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_2.qspobj b/experiments/qsp/haar_g2_3_2.qspobj deleted file mode 100644 index 358c3da2..00000000 Binary files a/experiments/qsp/haar_g2_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_3.qspobj b/experiments/qsp/haar_g2_3_3.qspobj deleted file mode 100644 index a76e642e..00000000 Binary files a/experiments/qsp/haar_g2_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_4.qspobj b/experiments/qsp/haar_g2_3_4.qspobj deleted file mode 100644 index 6b298a62..00000000 Binary files a/experiments/qsp/haar_g2_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_5.qspobj b/experiments/qsp/haar_g2_3_5.qspobj deleted file mode 100644 index 303e4682..00000000 Binary files a/experiments/qsp/haar_g2_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_6.qspobj b/experiments/qsp/haar_g2_3_6.qspobj deleted file mode 100644 index c0ce6950..00000000 Binary files a/experiments/qsp/haar_g2_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_7.qspobj b/experiments/qsp/haar_g2_3_7.qspobj deleted file mode 100644 index 9b07ed68..00000000 Binary files a/experiments/qsp/haar_g2_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_8.qspobj b/experiments/qsp/haar_g2_3_8.qspobj deleted file mode 100644 index 644a3c19..00000000 Binary files a/experiments/qsp/haar_g2_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_3_9.qspobj b/experiments/qsp/haar_g2_3_9.qspobj deleted file mode 100644 index fc559bad..00000000 Binary files a/experiments/qsp/haar_g2_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_1.qspobj b/experiments/qsp/haar_g2_4_1.qspobj deleted file mode 100644 index 9d23360f..00000000 Binary files a/experiments/qsp/haar_g2_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_10.qspobj b/experiments/qsp/haar_g2_4_10.qspobj deleted file mode 100644 index 0f3b690c..00000000 Binary files a/experiments/qsp/haar_g2_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_2.qspobj b/experiments/qsp/haar_g2_4_2.qspobj deleted file mode 100644 index c35c90ea..00000000 Binary files a/experiments/qsp/haar_g2_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_3.qspobj b/experiments/qsp/haar_g2_4_3.qspobj deleted file mode 100644 index eb016cbb..00000000 Binary files a/experiments/qsp/haar_g2_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_4.qspobj b/experiments/qsp/haar_g2_4_4.qspobj deleted file mode 100644 index 9d99b161..00000000 Binary files a/experiments/qsp/haar_g2_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_5.qspobj b/experiments/qsp/haar_g2_4_5.qspobj deleted file mode 100644 index cc330e42..00000000 Binary files a/experiments/qsp/haar_g2_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_6.qspobj b/experiments/qsp/haar_g2_4_6.qspobj deleted file mode 100644 index 2729d20f..00000000 Binary files a/experiments/qsp/haar_g2_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_7.qspobj b/experiments/qsp/haar_g2_4_7.qspobj deleted file mode 100644 index 2b00565c..00000000 Binary files a/experiments/qsp/haar_g2_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_8.qspobj b/experiments/qsp/haar_g2_4_8.qspobj deleted file mode 100644 index cb65a394..00000000 Binary files a/experiments/qsp/haar_g2_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_4_9.qspobj b/experiments/qsp/haar_g2_4_9.qspobj deleted file mode 100644 index 53adffdc..00000000 Binary files a/experiments/qsp/haar_g2_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_1.qspobj b/experiments/qsp/haar_g2_5_1.qspobj deleted file mode 100644 index d3d0012d..00000000 Binary files a/experiments/qsp/haar_g2_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_10.qspobj b/experiments/qsp/haar_g2_5_10.qspobj deleted file mode 100644 index 490f5768..00000000 Binary files a/experiments/qsp/haar_g2_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_2.qspobj b/experiments/qsp/haar_g2_5_2.qspobj deleted file mode 100644 index 927828d8..00000000 Binary files a/experiments/qsp/haar_g2_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_3.qspobj b/experiments/qsp/haar_g2_5_3.qspobj deleted file mode 100644 index 45d9dea6..00000000 Binary files a/experiments/qsp/haar_g2_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_4.qspobj b/experiments/qsp/haar_g2_5_4.qspobj deleted file mode 100644 index 654a0c38..00000000 Binary files a/experiments/qsp/haar_g2_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_5.qspobj b/experiments/qsp/haar_g2_5_5.qspobj deleted file mode 100644 index 984f8dd5..00000000 Binary files a/experiments/qsp/haar_g2_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_6.qspobj b/experiments/qsp/haar_g2_5_6.qspobj deleted file mode 100644 index 6ded60aa..00000000 Binary files a/experiments/qsp/haar_g2_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_7.qspobj b/experiments/qsp/haar_g2_5_7.qspobj deleted file mode 100644 index 37b8712a..00000000 Binary files a/experiments/qsp/haar_g2_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_8.qspobj b/experiments/qsp/haar_g2_5_8.qspobj deleted file mode 100644 index 94f17c02..00000000 Binary files a/experiments/qsp/haar_g2_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_5_9.qspobj b/experiments/qsp/haar_g2_5_9.qspobj deleted file mode 100644 index 012e17ad..00000000 Binary files a/experiments/qsp/haar_g2_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_1.qspobj b/experiments/qsp/haar_g2_6_1.qspobj deleted file mode 100644 index 641d915f..00000000 Binary files a/experiments/qsp/haar_g2_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_10.qspobj b/experiments/qsp/haar_g2_6_10.qspobj deleted file mode 100644 index 1077af42..00000000 Binary files a/experiments/qsp/haar_g2_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_2.qspobj b/experiments/qsp/haar_g2_6_2.qspobj deleted file mode 100644 index 02210f6c..00000000 Binary files a/experiments/qsp/haar_g2_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_3.qspobj b/experiments/qsp/haar_g2_6_3.qspobj deleted file mode 100644 index 4a0cd096..00000000 Binary files a/experiments/qsp/haar_g2_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_4.qspobj b/experiments/qsp/haar_g2_6_4.qspobj deleted file mode 100644 index 94813702..00000000 Binary files a/experiments/qsp/haar_g2_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_5.qspobj b/experiments/qsp/haar_g2_6_5.qspobj deleted file mode 100644 index 2b161adb..00000000 Binary files a/experiments/qsp/haar_g2_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_6.qspobj b/experiments/qsp/haar_g2_6_6.qspobj deleted file mode 100644 index 93f499bf..00000000 Binary files a/experiments/qsp/haar_g2_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_7.qspobj b/experiments/qsp/haar_g2_6_7.qspobj deleted file mode 100644 index 1c4bcd8b..00000000 Binary files a/experiments/qsp/haar_g2_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_8.qspobj b/experiments/qsp/haar_g2_6_8.qspobj deleted file mode 100644 index 8a37cef0..00000000 Binary files a/experiments/qsp/haar_g2_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_6_9.qspobj b/experiments/qsp/haar_g2_6_9.qspobj deleted file mode 100644 index 0127bf5b..00000000 Binary files a/experiments/qsp/haar_g2_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_1.qspobj b/experiments/qsp/haar_g2_7_1.qspobj deleted file mode 100644 index 8bdf3efb..00000000 Binary files a/experiments/qsp/haar_g2_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_10.qspobj b/experiments/qsp/haar_g2_7_10.qspobj deleted file mode 100644 index 54afd2b8..00000000 Binary files a/experiments/qsp/haar_g2_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_2.qspobj b/experiments/qsp/haar_g2_7_2.qspobj deleted file mode 100644 index ff9851a8..00000000 Binary files a/experiments/qsp/haar_g2_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_3.qspobj b/experiments/qsp/haar_g2_7_3.qspobj deleted file mode 100644 index 26e58ae6..00000000 Binary files a/experiments/qsp/haar_g2_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_4.qspobj b/experiments/qsp/haar_g2_7_4.qspobj deleted file mode 100644 index 8e302687..00000000 Binary files a/experiments/qsp/haar_g2_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_5.qspobj b/experiments/qsp/haar_g2_7_5.qspobj deleted file mode 100644 index e2e9522c..00000000 Binary files a/experiments/qsp/haar_g2_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_6.qspobj b/experiments/qsp/haar_g2_7_6.qspobj deleted file mode 100644 index 928e8f6f..00000000 Binary files a/experiments/qsp/haar_g2_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_7.qspobj b/experiments/qsp/haar_g2_7_7.qspobj deleted file mode 100644 index e39bbeee..00000000 Binary files a/experiments/qsp/haar_g2_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_8.qspobj b/experiments/qsp/haar_g2_7_8.qspobj deleted file mode 100644 index e6340fc6..00000000 Binary files a/experiments/qsp/haar_g2_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_7_9.qspobj b/experiments/qsp/haar_g2_7_9.qspobj deleted file mode 100644 index 85ce866c..00000000 Binary files a/experiments/qsp/haar_g2_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_1.qspobj b/experiments/qsp/haar_g2_8_1.qspobj deleted file mode 100644 index e5c3972b..00000000 Binary files a/experiments/qsp/haar_g2_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_10.qspobj b/experiments/qsp/haar_g2_8_10.qspobj deleted file mode 100644 index f4e92fa1..00000000 Binary files a/experiments/qsp/haar_g2_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_2.qspobj b/experiments/qsp/haar_g2_8_2.qspobj deleted file mode 100644 index 3c876a38..00000000 Binary files a/experiments/qsp/haar_g2_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_3.qspobj b/experiments/qsp/haar_g2_8_3.qspobj deleted file mode 100644 index d8f4cf98..00000000 Binary files a/experiments/qsp/haar_g2_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_4.qspobj b/experiments/qsp/haar_g2_8_4.qspobj deleted file mode 100644 index 8c95bbd1..00000000 Binary files a/experiments/qsp/haar_g2_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_5.qspobj b/experiments/qsp/haar_g2_8_5.qspobj deleted file mode 100644 index ef88c6a0..00000000 Binary files a/experiments/qsp/haar_g2_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_6.qspobj b/experiments/qsp/haar_g2_8_6.qspobj deleted file mode 100644 index 84c34add..00000000 Binary files a/experiments/qsp/haar_g2_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_7.qspobj b/experiments/qsp/haar_g2_8_7.qspobj deleted file mode 100644 index 58111e24..00000000 Binary files a/experiments/qsp/haar_g2_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_8.qspobj b/experiments/qsp/haar_g2_8_8.qspobj deleted file mode 100644 index 8ca11487..00000000 Binary files a/experiments/qsp/haar_g2_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_8_9.qspobj b/experiments/qsp/haar_g2_8_9.qspobj deleted file mode 100644 index f8aa1661..00000000 Binary files a/experiments/qsp/haar_g2_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_1.qspobj b/experiments/qsp/haar_g2_9_1.qspobj deleted file mode 100644 index ca3bf432..00000000 Binary files a/experiments/qsp/haar_g2_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_2.qspobj b/experiments/qsp/haar_g2_9_2.qspobj deleted file mode 100644 index b957c1e4..00000000 Binary files a/experiments/qsp/haar_g2_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_3.qspobj b/experiments/qsp/haar_g2_9_3.qspobj deleted file mode 100644 index 7da831c3..00000000 Binary files a/experiments/qsp/haar_g2_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_4.qspobj b/experiments/qsp/haar_g2_9_4.qspobj deleted file mode 100644 index 02fe3e9e..00000000 Binary files a/experiments/qsp/haar_g2_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_5.qspobj b/experiments/qsp/haar_g2_9_5.qspobj deleted file mode 100644 index 59a6090e..00000000 Binary files a/experiments/qsp/haar_g2_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_6.qspobj b/experiments/qsp/haar_g2_9_6.qspobj deleted file mode 100644 index dfc56a19..00000000 Binary files a/experiments/qsp/haar_g2_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_7.qspobj b/experiments/qsp/haar_g2_9_7.qspobj deleted file mode 100644 index d261d965..00000000 Binary files a/experiments/qsp/haar_g2_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2_9_8.qspobj b/experiments/qsp/haar_g2_9_8.qspobj deleted file mode 100644 index 43f333d0..00000000 Binary files a/experiments/qsp/haar_g2_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_1.qspobj b/experiments/qsp/haar_g2gn_3_1.qspobj deleted file mode 100644 index c6b42915..00000000 Binary files a/experiments/qsp/haar_g2gn_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_10.qspobj b/experiments/qsp/haar_g2gn_3_10.qspobj deleted file mode 100644 index 181d3bd1..00000000 Binary files a/experiments/qsp/haar_g2gn_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_2.qspobj b/experiments/qsp/haar_g2gn_3_2.qspobj deleted file mode 100644 index 869c1e87..00000000 Binary files a/experiments/qsp/haar_g2gn_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_3.qspobj b/experiments/qsp/haar_g2gn_3_3.qspobj deleted file mode 100644 index bc25b19e..00000000 Binary files a/experiments/qsp/haar_g2gn_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_4.qspobj b/experiments/qsp/haar_g2gn_3_4.qspobj deleted file mode 100644 index dd8a8bcd..00000000 Binary files a/experiments/qsp/haar_g2gn_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_5.qspobj b/experiments/qsp/haar_g2gn_3_5.qspobj deleted file mode 100644 index 90e95647..00000000 Binary files a/experiments/qsp/haar_g2gn_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_6.qspobj b/experiments/qsp/haar_g2gn_3_6.qspobj deleted file mode 100644 index 1f939f85..00000000 Binary files a/experiments/qsp/haar_g2gn_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_7.qspobj b/experiments/qsp/haar_g2gn_3_7.qspobj deleted file mode 100644 index 0c3071aa..00000000 Binary files a/experiments/qsp/haar_g2gn_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_8.qspobj b/experiments/qsp/haar_g2gn_3_8.qspobj deleted file mode 100644 index 660fd179..00000000 Binary files a/experiments/qsp/haar_g2gn_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_3_9.qspobj b/experiments/qsp/haar_g2gn_3_9.qspobj deleted file mode 100644 index 866dd577..00000000 Binary files a/experiments/qsp/haar_g2gn_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_1.qspobj b/experiments/qsp/haar_g2gn_4_1.qspobj deleted file mode 100644 index 1ab6f1a6..00000000 Binary files a/experiments/qsp/haar_g2gn_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_10.qspobj b/experiments/qsp/haar_g2gn_4_10.qspobj deleted file mode 100644 index 96298948..00000000 Binary files a/experiments/qsp/haar_g2gn_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_2.qspobj b/experiments/qsp/haar_g2gn_4_2.qspobj deleted file mode 100644 index 7092f388..00000000 Binary files a/experiments/qsp/haar_g2gn_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_3.qspobj b/experiments/qsp/haar_g2gn_4_3.qspobj deleted file mode 100644 index 29be0277..00000000 Binary files a/experiments/qsp/haar_g2gn_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_4.qspobj b/experiments/qsp/haar_g2gn_4_4.qspobj deleted file mode 100644 index f14eb135..00000000 Binary files a/experiments/qsp/haar_g2gn_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_5.qspobj b/experiments/qsp/haar_g2gn_4_5.qspobj deleted file mode 100644 index 3d8b0a9d..00000000 Binary files a/experiments/qsp/haar_g2gn_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_6.qspobj b/experiments/qsp/haar_g2gn_4_6.qspobj deleted file mode 100644 index 8261ad4b..00000000 Binary files a/experiments/qsp/haar_g2gn_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_7.qspobj b/experiments/qsp/haar_g2gn_4_7.qspobj deleted file mode 100644 index 9e95d70f..00000000 Binary files a/experiments/qsp/haar_g2gn_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_8.qspobj b/experiments/qsp/haar_g2gn_4_8.qspobj deleted file mode 100644 index a298a6bb..00000000 Binary files a/experiments/qsp/haar_g2gn_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_4_9.qspobj b/experiments/qsp/haar_g2gn_4_9.qspobj deleted file mode 100644 index 62a95b5c..00000000 Binary files a/experiments/qsp/haar_g2gn_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_1.qspobj b/experiments/qsp/haar_g2gn_5_1.qspobj deleted file mode 100644 index 46ff1004..00000000 Binary files a/experiments/qsp/haar_g2gn_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_10.qspobj b/experiments/qsp/haar_g2gn_5_10.qspobj deleted file mode 100644 index 0e09d33c..00000000 Binary files a/experiments/qsp/haar_g2gn_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_2.qspobj b/experiments/qsp/haar_g2gn_5_2.qspobj deleted file mode 100644 index d1df9fb8..00000000 Binary files a/experiments/qsp/haar_g2gn_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_3.qspobj b/experiments/qsp/haar_g2gn_5_3.qspobj deleted file mode 100644 index 8e13b08f..00000000 Binary files a/experiments/qsp/haar_g2gn_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_4.qspobj b/experiments/qsp/haar_g2gn_5_4.qspobj deleted file mode 100644 index 6c1515cd..00000000 Binary files a/experiments/qsp/haar_g2gn_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_5.qspobj b/experiments/qsp/haar_g2gn_5_5.qspobj deleted file mode 100644 index 712e723b..00000000 Binary files a/experiments/qsp/haar_g2gn_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_6.qspobj b/experiments/qsp/haar_g2gn_5_6.qspobj deleted file mode 100644 index 0c31414e..00000000 Binary files a/experiments/qsp/haar_g2gn_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_7.qspobj b/experiments/qsp/haar_g2gn_5_7.qspobj deleted file mode 100644 index e9282e55..00000000 Binary files a/experiments/qsp/haar_g2gn_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_8.qspobj b/experiments/qsp/haar_g2gn_5_8.qspobj deleted file mode 100644 index f9fa1af4..00000000 Binary files a/experiments/qsp/haar_g2gn_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_5_9.qspobj b/experiments/qsp/haar_g2gn_5_9.qspobj deleted file mode 100644 index 36c6ee9d..00000000 Binary files a/experiments/qsp/haar_g2gn_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_1.qspobj b/experiments/qsp/haar_g2gn_6_1.qspobj deleted file mode 100644 index febb7465..00000000 Binary files a/experiments/qsp/haar_g2gn_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_10.qspobj b/experiments/qsp/haar_g2gn_6_10.qspobj deleted file mode 100644 index 35db7cce..00000000 Binary files a/experiments/qsp/haar_g2gn_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_2.qspobj b/experiments/qsp/haar_g2gn_6_2.qspobj deleted file mode 100644 index 4e915c4c..00000000 Binary files a/experiments/qsp/haar_g2gn_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_3.qspobj b/experiments/qsp/haar_g2gn_6_3.qspobj deleted file mode 100644 index abdb9a4b..00000000 Binary files a/experiments/qsp/haar_g2gn_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_4.qspobj b/experiments/qsp/haar_g2gn_6_4.qspobj deleted file mode 100644 index 23f9b898..00000000 Binary files a/experiments/qsp/haar_g2gn_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_5.qspobj b/experiments/qsp/haar_g2gn_6_5.qspobj deleted file mode 100644 index a693329a..00000000 Binary files a/experiments/qsp/haar_g2gn_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_6.qspobj b/experiments/qsp/haar_g2gn_6_6.qspobj deleted file mode 100644 index 49ef7856..00000000 Binary files a/experiments/qsp/haar_g2gn_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_7.qspobj b/experiments/qsp/haar_g2gn_6_7.qspobj deleted file mode 100644 index 696654cd..00000000 Binary files a/experiments/qsp/haar_g2gn_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_8.qspobj b/experiments/qsp/haar_g2gn_6_8.qspobj deleted file mode 100644 index f3662c61..00000000 Binary files a/experiments/qsp/haar_g2gn_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_6_9.qspobj b/experiments/qsp/haar_g2gn_6_9.qspobj deleted file mode 100644 index 0f76c383..00000000 Binary files a/experiments/qsp/haar_g2gn_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_1.qspobj b/experiments/qsp/haar_g2gn_7_1.qspobj deleted file mode 100644 index baf4f282..00000000 Binary files a/experiments/qsp/haar_g2gn_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_10.qspobj b/experiments/qsp/haar_g2gn_7_10.qspobj deleted file mode 100644 index 36450bb7..00000000 Binary files a/experiments/qsp/haar_g2gn_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_2.qspobj b/experiments/qsp/haar_g2gn_7_2.qspobj deleted file mode 100644 index 9ccae32a..00000000 Binary files a/experiments/qsp/haar_g2gn_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_3.qspobj b/experiments/qsp/haar_g2gn_7_3.qspobj deleted file mode 100644 index 363f6ea7..00000000 Binary files a/experiments/qsp/haar_g2gn_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_4.qspobj b/experiments/qsp/haar_g2gn_7_4.qspobj deleted file mode 100644 index 4e207b80..00000000 Binary files a/experiments/qsp/haar_g2gn_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_5.qspobj b/experiments/qsp/haar_g2gn_7_5.qspobj deleted file mode 100644 index 84995abb..00000000 Binary files a/experiments/qsp/haar_g2gn_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_6.qspobj b/experiments/qsp/haar_g2gn_7_6.qspobj deleted file mode 100644 index ab97ef6f..00000000 Binary files a/experiments/qsp/haar_g2gn_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_7.qspobj b/experiments/qsp/haar_g2gn_7_7.qspobj deleted file mode 100644 index 584027fd..00000000 Binary files a/experiments/qsp/haar_g2gn_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_8.qspobj b/experiments/qsp/haar_g2gn_7_8.qspobj deleted file mode 100644 index f0067c22..00000000 Binary files a/experiments/qsp/haar_g2gn_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_7_9.qspobj b/experiments/qsp/haar_g2gn_7_9.qspobj deleted file mode 100644 index 17951bea..00000000 Binary files a/experiments/qsp/haar_g2gn_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_1.qspobj b/experiments/qsp/haar_g2gn_8_1.qspobj deleted file mode 100644 index 774e3ec3..00000000 Binary files a/experiments/qsp/haar_g2gn_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_10.qspobj b/experiments/qsp/haar_g2gn_8_10.qspobj deleted file mode 100644 index 932df822..00000000 Binary files a/experiments/qsp/haar_g2gn_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_2.qspobj b/experiments/qsp/haar_g2gn_8_2.qspobj deleted file mode 100644 index 68ad6213..00000000 Binary files a/experiments/qsp/haar_g2gn_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_3.qspobj b/experiments/qsp/haar_g2gn_8_3.qspobj deleted file mode 100644 index b393f789..00000000 Binary files a/experiments/qsp/haar_g2gn_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_4.qspobj b/experiments/qsp/haar_g2gn_8_4.qspobj deleted file mode 100644 index 240badac..00000000 Binary files a/experiments/qsp/haar_g2gn_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_5.qspobj b/experiments/qsp/haar_g2gn_8_5.qspobj deleted file mode 100644 index 067ecc68..00000000 Binary files a/experiments/qsp/haar_g2gn_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_6.qspobj b/experiments/qsp/haar_g2gn_8_6.qspobj deleted file mode 100644 index ec97db30..00000000 Binary files a/experiments/qsp/haar_g2gn_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_7.qspobj b/experiments/qsp/haar_g2gn_8_7.qspobj deleted file mode 100644 index 47bfee2d..00000000 Binary files a/experiments/qsp/haar_g2gn_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_8.qspobj b/experiments/qsp/haar_g2gn_8_8.qspobj deleted file mode 100644 index fa052ba1..00000000 Binary files a/experiments/qsp/haar_g2gn_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_8_9.qspobj b/experiments/qsp/haar_g2gn_8_9.qspobj deleted file mode 100644 index f5e183ce..00000000 Binary files a/experiments/qsp/haar_g2gn_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_1.qspobj b/experiments/qsp/haar_g2gn_9_1.qspobj deleted file mode 100644 index 298cb694..00000000 Binary files a/experiments/qsp/haar_g2gn_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_2.qspobj b/experiments/qsp/haar_g2gn_9_2.qspobj deleted file mode 100644 index a0b69100..00000000 Binary files a/experiments/qsp/haar_g2gn_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_3.qspobj b/experiments/qsp/haar_g2gn_9_3.qspobj deleted file mode 100644 index cf1b7690..00000000 Binary files a/experiments/qsp/haar_g2gn_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_4.qspobj b/experiments/qsp/haar_g2gn_9_4.qspobj deleted file mode 100644 index d27f76f3..00000000 Binary files a/experiments/qsp/haar_g2gn_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_5.qspobj b/experiments/qsp/haar_g2gn_9_5.qspobj deleted file mode 100644 index 1840d53e..00000000 Binary files a/experiments/qsp/haar_g2gn_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_6.qspobj b/experiments/qsp/haar_g2gn_9_6.qspobj deleted file mode 100644 index 3ab76e4e..00000000 Binary files a/experiments/qsp/haar_g2gn_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_7.qspobj b/experiments/qsp/haar_g2gn_9_7.qspobj deleted file mode 100644 index 908442e9..00000000 Binary files a/experiments/qsp/haar_g2gn_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_8.qspobj b/experiments/qsp/haar_g2gn_9_8.qspobj deleted file mode 100644 index 06b8bb2b..00000000 Binary files a/experiments/qsp/haar_g2gn_9_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gn_9_9.qspobj b/experiments/qsp/haar_g2gn_9_9.qspobj deleted file mode 100644 index 02098f77..00000000 Binary files a/experiments/qsp/haar_g2gn_9_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_1.qspobj b/experiments/qsp/haar_g2gnw_3_1.qspobj deleted file mode 100644 index 0f880dba..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_10.qspobj b/experiments/qsp/haar_g2gnw_3_10.qspobj deleted file mode 100644 index 4e22f2c1..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_2.qspobj b/experiments/qsp/haar_g2gnw_3_2.qspobj deleted file mode 100644 index 87290ab6..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_3.qspobj b/experiments/qsp/haar_g2gnw_3_3.qspobj deleted file mode 100644 index 8712bf44..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_4.qspobj b/experiments/qsp/haar_g2gnw_3_4.qspobj deleted file mode 100644 index f22187f0..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_5.qspobj b/experiments/qsp/haar_g2gnw_3_5.qspobj deleted file mode 100644 index f14d38c3..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_6.qspobj b/experiments/qsp/haar_g2gnw_3_6.qspobj deleted file mode 100644 index 367771ba..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_7.qspobj b/experiments/qsp/haar_g2gnw_3_7.qspobj deleted file mode 100644 index 55b12c2c..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_8.qspobj b/experiments/qsp/haar_g2gnw_3_8.qspobj deleted file mode 100644 index 7c2d0907..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_3_9.qspobj b/experiments/qsp/haar_g2gnw_3_9.qspobj deleted file mode 100644 index 75def598..00000000 Binary files a/experiments/qsp/haar_g2gnw_3_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_1.qspobj b/experiments/qsp/haar_g2gnw_4_1.qspobj deleted file mode 100644 index 4c3b0807..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_10.qspobj b/experiments/qsp/haar_g2gnw_4_10.qspobj deleted file mode 100644 index 219a127d..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_2.qspobj b/experiments/qsp/haar_g2gnw_4_2.qspobj deleted file mode 100644 index 0ab64953..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_3.qspobj b/experiments/qsp/haar_g2gnw_4_3.qspobj deleted file mode 100644 index 1b45df1f..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_4.qspobj b/experiments/qsp/haar_g2gnw_4_4.qspobj deleted file mode 100644 index d29c1e34..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_5.qspobj b/experiments/qsp/haar_g2gnw_4_5.qspobj deleted file mode 100644 index 937025d9..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_6.qspobj b/experiments/qsp/haar_g2gnw_4_6.qspobj deleted file mode 100644 index 39eff5a6..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_7.qspobj b/experiments/qsp/haar_g2gnw_4_7.qspobj deleted file mode 100644 index 33a408b2..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_8.qspobj b/experiments/qsp/haar_g2gnw_4_8.qspobj deleted file mode 100644 index 2a582fa3..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_4_9.qspobj b/experiments/qsp/haar_g2gnw_4_9.qspobj deleted file mode 100644 index aa99909a..00000000 Binary files a/experiments/qsp/haar_g2gnw_4_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_1.qspobj b/experiments/qsp/haar_g2gnw_5_1.qspobj deleted file mode 100644 index b1f2a54f..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_10.qspobj b/experiments/qsp/haar_g2gnw_5_10.qspobj deleted file mode 100644 index f8e63558..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_2.qspobj b/experiments/qsp/haar_g2gnw_5_2.qspobj deleted file mode 100644 index 7c6a7dd8..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_3.qspobj b/experiments/qsp/haar_g2gnw_5_3.qspobj deleted file mode 100644 index bae54822..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_4.qspobj b/experiments/qsp/haar_g2gnw_5_4.qspobj deleted file mode 100644 index a1c2ce33..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_5.qspobj b/experiments/qsp/haar_g2gnw_5_5.qspobj deleted file mode 100644 index 1b770c3b..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_6.qspobj b/experiments/qsp/haar_g2gnw_5_6.qspobj deleted file mode 100644 index a1f7f9f6..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_7.qspobj b/experiments/qsp/haar_g2gnw_5_7.qspobj deleted file mode 100644 index a08e5354..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_8.qspobj b/experiments/qsp/haar_g2gnw_5_8.qspobj deleted file mode 100644 index 0eab832f..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_5_9.qspobj b/experiments/qsp/haar_g2gnw_5_9.qspobj deleted file mode 100644 index 9276b1a6..00000000 Binary files a/experiments/qsp/haar_g2gnw_5_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_1.qspobj b/experiments/qsp/haar_g2gnw_6_1.qspobj deleted file mode 100644 index 85f9912c..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_10.qspobj b/experiments/qsp/haar_g2gnw_6_10.qspobj deleted file mode 100644 index 34543fd3..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_2.qspobj b/experiments/qsp/haar_g2gnw_6_2.qspobj deleted file mode 100644 index 53c2c23f..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_3.qspobj b/experiments/qsp/haar_g2gnw_6_3.qspobj deleted file mode 100644 index 6db08593..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_4.qspobj b/experiments/qsp/haar_g2gnw_6_4.qspobj deleted file mode 100644 index 991fcd25..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_5.qspobj b/experiments/qsp/haar_g2gnw_6_5.qspobj deleted file mode 100644 index b366bf4e..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_6.qspobj b/experiments/qsp/haar_g2gnw_6_6.qspobj deleted file mode 100644 index a79ae2ab..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_7.qspobj b/experiments/qsp/haar_g2gnw_6_7.qspobj deleted file mode 100644 index 5b751d58..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_8.qspobj b/experiments/qsp/haar_g2gnw_6_8.qspobj deleted file mode 100644 index e0a8d7d6..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_6_9.qspobj b/experiments/qsp/haar_g2gnw_6_9.qspobj deleted file mode 100644 index 005ea2ed..00000000 Binary files a/experiments/qsp/haar_g2gnw_6_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_1.qspobj b/experiments/qsp/haar_g2gnw_7_1.qspobj deleted file mode 100644 index a952473a..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_10.qspobj b/experiments/qsp/haar_g2gnw_7_10.qspobj deleted file mode 100644 index ff5fc943..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_2.qspobj b/experiments/qsp/haar_g2gnw_7_2.qspobj deleted file mode 100644 index 4a7ff4e4..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_3.qspobj b/experiments/qsp/haar_g2gnw_7_3.qspobj deleted file mode 100644 index bfc18216..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_4.qspobj b/experiments/qsp/haar_g2gnw_7_4.qspobj deleted file mode 100644 index a865720e..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_5.qspobj b/experiments/qsp/haar_g2gnw_7_5.qspobj deleted file mode 100644 index d194462c..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_6.qspobj b/experiments/qsp/haar_g2gnw_7_6.qspobj deleted file mode 100644 index bb2578f2..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_7.qspobj b/experiments/qsp/haar_g2gnw_7_7.qspobj deleted file mode 100644 index bf461f47..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_8.qspobj b/experiments/qsp/haar_g2gnw_7_8.qspobj deleted file mode 100644 index 1702c56c..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_7_9.qspobj b/experiments/qsp/haar_g2gnw_7_9.qspobj deleted file mode 100644 index 7c876467..00000000 Binary files a/experiments/qsp/haar_g2gnw_7_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_1.qspobj b/experiments/qsp/haar_g2gnw_8_1.qspobj deleted file mode 100644 index 1d37d40f..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_10.qspobj b/experiments/qsp/haar_g2gnw_8_10.qspobj deleted file mode 100644 index dbc517cc..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_10.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_2.qspobj b/experiments/qsp/haar_g2gnw_8_2.qspobj deleted file mode 100644 index 5549667c..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_3.qspobj b/experiments/qsp/haar_g2gnw_8_3.qspobj deleted file mode 100644 index 464ff94d..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_4.qspobj b/experiments/qsp/haar_g2gnw_8_4.qspobj deleted file mode 100644 index 27fea595..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_5.qspobj b/experiments/qsp/haar_g2gnw_8_5.qspobj deleted file mode 100644 index c8e74b53..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_6.qspobj b/experiments/qsp/haar_g2gnw_8_6.qspobj deleted file mode 100644 index 7244467f..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_7.qspobj b/experiments/qsp/haar_g2gnw_8_7.qspobj deleted file mode 100644 index b172c693..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_8.qspobj b/experiments/qsp/haar_g2gnw_8_8.qspobj deleted file mode 100644 index 9ed96c48..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_8.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_8_9.qspobj b/experiments/qsp/haar_g2gnw_8_9.qspobj deleted file mode 100644 index 07e78eb3..00000000 Binary files a/experiments/qsp/haar_g2gnw_8_9.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_1.qspobj b/experiments/qsp/haar_g2gnw_9_1.qspobj deleted file mode 100644 index 276253e9..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_1.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_2.qspobj b/experiments/qsp/haar_g2gnw_9_2.qspobj deleted file mode 100644 index 2106306a..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_2.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_3.qspobj b/experiments/qsp/haar_g2gnw_9_3.qspobj deleted file mode 100644 index 9749ccc6..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_3.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_4.qspobj b/experiments/qsp/haar_g2gnw_9_4.qspobj deleted file mode 100644 index 4454f476..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_4.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_5.qspobj b/experiments/qsp/haar_g2gnw_9_5.qspobj deleted file mode 100644 index 280b1ac9..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_5.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_6.qspobj b/experiments/qsp/haar_g2gnw_9_6.qspobj deleted file mode 100644 index 997753de..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_6.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_7.qspobj b/experiments/qsp/haar_g2gnw_9_7.qspobj deleted file mode 100644 index 1ba5152a..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_7.qspobj and /dev/null differ diff --git a/experiments/qsp/haar_g2gnw_9_9.qspobj b/experiments/qsp/haar_g2gnw_9_9.qspobj deleted file mode 100644 index 861ab15a..00000000 Binary files a/experiments/qsp/haar_g2gnw_9_9.qspobj and /dev/null differ diff --git a/experiments/tomography/compare_W.ipynb b/experiments/tomography/compare_W.ipynb index 793ef969..469541a2 100644 --- a/experiments/tomography/compare_W.ipynb +++ b/experiments/tomography/compare_W.ipynb @@ -182,7 +182,7 @@ " ',' + str(num_qubits) + '): ' + str(i))\n", " qc_copy = qsee.ansatz.create_Wchain_layerd_state(\n", " qc.copy(), thetas, num_layers)\n", - " loss = qsee.loss.loss_basis(.measure(\n", + " loss = qsee.loss.loss_basic(.measure(\n", " qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n", " thetass.append(thetas.copy())\n", @@ -423,7 +423,7 @@ " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_Walternatingchecker_haar(\n", " qc.copy(), thetas, num_layers)\n", - " loss = qsee.loss.loss_basis(.measure(\n", + " loss = qsee.loss.loss_basic(.measure(\n", " qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n" ] @@ -609,7 +609,7 @@ " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_Walltoall_layerd_state(\n", " qc.copy(), thetas, num_layers)\n", - " loss = qsee.loss.loss_basis(.measure(\n", + " loss = qsee.loss.loss_basic(.measure(\n", " qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n", "\n", diff --git a/experiments/tomography/compare_W_QNG.ipynb b/experiments/tomography/compare_W_QNG.ipynb index ab6c3bd2..812c2dff 100644 --- a/experiments/tomography/compare_W_QNG.ipynb +++ b/experiments/tomography/compare_W_QNG.ipynb @@ -235,7 +235,7 @@ " thetas, num_layers = num_layers)\n", " thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.inv(G) @ grad_loss))\n", " qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) \n", - " loss = qsee.loss.loss_basis(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", + " loss = qsee.loss.loss_basic(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", " thetass.append(thetas.copy())\n", " loss_values.append(loss)\n" ] @@ -554,7 +554,7 @@ " thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) \n", " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) \n", - " loss = qsee.loss.loss_basis(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", + " loss = qsee.loss.loss_basic(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)" ] }, @@ -740,7 +740,7 @@ " thetas -= qsee.constant.learning_rate*(grad_loss) \n", " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) \n", - " loss = qsee.loss.loss_basis(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", + " loss = qsee.loss.loss_basic(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n" ] }, diff --git a/experiments/tomography/compare_W_QNGCNOT.ipynb b/experiments/tomography/compare_W_QNGCNOT.ipynb index 7ac7cd43..88e4de0a 100644 --- a/experiments/tomography/compare_W_QNGCNOT.ipynb +++ b/experiments/tomography/compare_W_QNGCNOT.ipynb @@ -4614,7 +4614,7 @@ " thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.inv(G) @ grad_loss))\n", " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_WchainCNOT_layerd_state(qc.copy(), thetas, num_layers) \n", - " loss = qsee.loss.loss_basis(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", + " loss = qsee.loss.loss_basic(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n" ] }, @@ -4744,7 +4744,7 @@ " thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) \n", " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_WalternatingCNOT_layerd_state(qc.copy(), thetas, num_layers) \n", - " loss = qsee.loss.loss_basis(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", + " loss = qsee.loss.loss_basic(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)" ] }, @@ -4888,7 +4888,7 @@ " thetas -= qsee.constant.learning_rate*(grad_loss) \n", " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_WalltoallCNOT_layerd_state(qc.copy(), thetas, num_layers) \n", - " loss = qsee.loss.loss_basis(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", + " loss = qsee.loss.loss_basic(.measure(qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n" ] }, diff --git a/experiments/tomography/multiprocessing_scripts/barren_plateues_walltoall6_8.py b/experiments/tomography/multiprocessing_scripts/barren_plateues_walltoall6_8.py deleted file mode 100644 index d36b4580..00000000 --- a/experiments/tomography/multiprocessing_scripts/barren_plateues_walltoall6_8.py +++ /dev/null @@ -1,37 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.gradient -layers = range(6, 9) -ts = [] -for num_layers in layers: - variances = [] - grads = [] - num_qubits = 4 - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi) - loss_values = [] - thetass = [] - for i in range(0, 200): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walltoall_layered_ansatz, num_layers = num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layered_ansatz, - thetas, num_layers = num_layers) - - grad = np.linalg.inv(G) @ grad_loss - grads.append(grad) - t = [] - for grad in grads: - t.append(grad[-1]) - print(np.var(t)) - ts.append(np.var(t)) -np.savetxt("./barren_walltoall6_8.csv", ts, delimiter=",") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/barren_plateues_walltoall9_10.py b/experiments/tomography/multiprocessing_scripts/barren_plateues_walltoall9_10.py deleted file mode 100644 index 6eea38b8..00000000 --- a/experiments/tomography/multiprocessing_scripts/barren_plateues_walltoall9_10.py +++ /dev/null @@ -1,37 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.gradient -layers = range(9, 11) -ts = [] -for num_layers in layers: - variances = [] - grads = [] - num_qubits = 4 - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi) - loss_values = [] - thetass = [] - for i in range(0, 200): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walltoall_layered_ansatz, num_layers = num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layered_ansatz, - thetas, num_layers = num_layers) - - grad = np.linalg.inv(G) @ grad_loss - grads.append(grad) - t = [] - for grad in grads: - t.append(grad[-1]) - print(np.var(t)) - ts.append(np.var(t)) -np.savetxt("./barren_walltoall9_10.csv", ts, delimiter=",") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/barren_plateues_walternating6_8.py b/experiments/tomography/multiprocessing_scripts/barren_plateues_walternating6_8.py deleted file mode 100644 index ca47e5f0..00000000 --- a/experiments/tomography/multiprocessing_scripts/barren_plateues_walternating6_8.py +++ /dev/null @@ -1,35 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.gradient -layers = range(6, 9) -ts = [] -for num_layers in layers: - variances = [] - grads = [] - num_qubits = 4 - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 200): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layered_ansatz, num_layers = num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layered_ansatz, - thetas, num_layers = num_layers) - - grad = np.linalg.inv(G) @ grad_loss - grads.append(grad) - t = [] - for grad in grads: - t.append(grad[-1]) - print(np.var(t)) - ts.append(np.var(t)) -np.savetxt("./barren_walternating6_8.csv", ts, delimiter=",") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/barren_plateues_walternating9_10.py b/experiments/tomography/multiprocessing_scripts/barren_plateues_walternating9_10.py deleted file mode 100644 index fa911710..00000000 --- a/experiments/tomography/multiprocessing_scripts/barren_plateues_walternating9_10.py +++ /dev/null @@ -1,35 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.gradient -layers = range(9, 11) -ts = [] -for num_layers in layers: - variances = [] - grads = [] - num_qubits = 4 - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 200): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layered_ansatz, num_layers = num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layered_ansatz, - thetas, num_layers = num_layers) - - grad = np.linalg.inv(G) @ grad_loss - grads.append(grad) - t = [] - for grad in grads: - t.append(grad[-1]) - print(np.var(t)) - ts.append(np.var(t)) -np.savetxt("./barren_walternating9_10.csv", ts, delimiter=",") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/barren_plateues_wchain6_8.py b/experiments/tomography/multiprocessing_scripts/barren_plateues_wchain6_8.py deleted file mode 100644 index 92afa706..00000000 --- a/experiments/tomography/multiprocessing_scripts/barren_plateues_wchain6_8.py +++ /dev/null @@ -1,35 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.gradient -layers = range(6, 9) -ts = [] -for num_layers in layers: - variances = [] - grads = [] - num_qubits = 4 - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 200): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Wchain_layered_ansatz, num_layers = num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layered_ansatz, - thetas, num_layers = num_layers) - - grad = np.linalg.inv(G) @ grad_loss - grads.append(grad) - t = [] - for grad in grads: - t.append(grad[-1]) - print(np.var(t)) - ts.append(np.var(t)) -np.savetxt("./barren_wchain6_8.csv", ts, delimiter=",") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/barren_plateues_wchain9_10.py b/experiments/tomography/multiprocessing_scripts/barren_plateues_wchain9_10.py deleted file mode 100644 index 3b2aae8f..00000000 --- a/experiments/tomography/multiprocessing_scripts/barren_plateues_wchain9_10.py +++ /dev/null @@ -1,35 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.gradient -layers = range(9, 11) -ts = [] -for num_layers in layers: - variances = [] - grads = [] - num_qubits = 4 - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 200): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Wchain_layered_ansatz, num_layers = num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layered_ansatz, - thetas, num_layers = num_layers) - - grad = np.linalg.inv(G) @ grad_loss - grads.append(grad) - t = [] - for grad in grads: - t.append(grad[-1]) - print(np.var(t)) - ts.append(np.var(t)) -np.savetxt("./barren_wchain9_10.csv", ts, delimiter=",") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_WalltoallCNOT_adam.py b/experiments/tomography/multiprocessing_scripts/compare_WalltoallCNOT_adam.py deleted file mode 100644 index 84328215..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_WalltoallCNOT_adam.py +++ /dev/null @@ -1,90 +0,0 @@ - -import multiprocessing - -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.state -import qsee.gradient -import qsee.ansatz -import qsee.backend.constant -import qsee.measure - - -def run_walltoall(num_layers, num_qubits): - - thetas = np.ones(num_layers * 3 * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + - ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_WalternatingCNOT_layerd_state, - thetas, r=1/2, s=np.pi/2, num_layers=num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_WalternatingCNOT_layerd_state( - qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure( - qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_WalternatingCNOT_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + - ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + - str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [3, 4, 5] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process( - target=run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") diff --git a/experiments/tomography/multiprocessing_scripts/compare_WalltoallCNOT_qng.py b/experiments/tomography/multiprocessing_scripts/compare_WalltoallCNOT_qng.py deleted file mode 100644 index d42e8b14..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_WalltoallCNOT_qng.py +++ /dev/null @@ -1,86 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi) - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_WalltoallCNOT_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_WalltoallCNOT_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_WalltoallCNOT_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_WalltoallCNOT_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [3, 4, 5] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append( - multiprocessing.Process(target=run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam.py deleted file mode 100644 index c66b4c6f..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam.py +++ /dev/null @@ -1,74 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process(target = run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam_1layers.py deleted file mode 100644 index a0f92567..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam_1layers.py +++ /dev/null @@ -1,74 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process(target = run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam_5layers.py deleted file mode 100644 index 1ba7a94a..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_adam_5layers.py +++ /dev/null @@ -1,74 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process(target = run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng.py deleted file mode 100644 index 544261c4..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng.py +++ /dev/null @@ -1,89 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - - -def run_walltoall(num_layers, num_qubits): - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi) - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walltoall_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - traces = [] - fidelities = [] - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append( - multiprocessing.Process(target=run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng_1layers.py deleted file mode 100644 index 9f20c2a6..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng_1layers.py +++ /dev/null @@ -1,89 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - - -def run_walltoall(num_layers, num_qubits): - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi) - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walltoall_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - traces = [] - fidelities = [] - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append( - multiprocessing.Process(target=run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng_5layers.py deleted file mode 100644 index 9b3f2542..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_qng_5layers.py +++ /dev/null @@ -1,88 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walltoall(num_layers, num_qubits): - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi) - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walltoall_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - traces = [] - fidelities = [] - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + - "/" + str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append( - multiprocessing.Process(target=run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd.py deleted file mode 100644 index 8c9c9043..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process(target = run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd_1layers.py deleted file mode 100644 index 85176f63..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd_1layers.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process(target = run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd_5layers.py deleted file mode 100644 index 064a8dff..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walltoall_sgd_5layers.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walltoall(num_layers, num_qubits): - - n_walltoall = qsee.ansatz.calculate_n_walltoall(num_qubits) - thetas = np.ones(num_layers* 3 * num_qubits + num_layers*n_walltoall) - - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alltoall: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walltoall_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walltoall_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walltoall_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walltoall_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_walltoalls = [] - - for i in num_layers: - for j in num_qubits: - t_walltoalls.append(multiprocessing.Process(target = run_walltoall, args=(i, j))) - - for t_walltoall in t_walltoalls: - t_walltoall.start() - - for t_walltoall in t_walltoalls: - t_walltoall.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_WalternatingCNOT_adam.py b/experiments/tomography/multiprocessing_scripts/compare_WalternatingCNOT_adam.py deleted file mode 100644 index cb5f724d..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_WalternatingCNOT_adam.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_WalternatingCNOT_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_WalternatingCNOT_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_WalternatingCNOT_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [3, 4, 5] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_WalternatingCNOT_qng.py b/experiments/tomography/multiprocessing_scripts/compare_WalternatingCNOT_qng.py deleted file mode 100644 index 6fc723ad..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_WalternatingCNOT_qng.py +++ /dev/null @@ -1,83 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(num_qubits)) - - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_WalternatingCNOT_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_WalternatingCNOT_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_WalternatingCNOT_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_WalternatingCNOT_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [3, 4, 5] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append( - multiprocessing.Process(target=run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam.py deleted file mode 100644 index 01959f77..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam_1layers.py deleted file mode 100644 index d8debb77..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam_1layers.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam_5layers.py deleted file mode 100644 index 225241b6..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_adam_5layers.py +++ /dev/null @@ -1,73 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng.py deleted file mode 100644 index 23c27953..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng.py +++ /dev/null @@ -1,86 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: ', i) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 36] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append( - multiprocessing.Process(target=run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_1layers.py deleted file mode 100644 index 1f2c6df4..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_1layers.py +++ /dev/null @@ -1,86 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: ', i) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append( - multiprocessing.Process(target=run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_4layers_4qubits.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_4layers_4qubits.py deleted file mode 100644 index d0999c52..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_4layers_4qubits.py +++ /dev/null @@ -1,86 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: ', i) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [4] - num_qubits = [4] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append( - multiprocessing.Process(target=run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_5layers.py deleted file mode 100644 index c3354658..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_qng_5layers.py +++ /dev/null @@ -1,86 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: ', i) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append( - multiprocessing.Process(target=run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd.py deleted file mode 100644 index bbfba678..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd.py +++ /dev/null @@ -1,70 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_1layers.py deleted file mode 100644 index 5a286970..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_1layers.py +++ /dev/null @@ -1,71 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_4layers_4qubits.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_4layers_4qubits.py deleted file mode 100644 index d0999c52..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_4layers_4qubits.py +++ /dev/null @@ -1,86 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing - - -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_qubits*num_layers/2) + 3 * num_layers * num_qubits) - psi = 2 * np.random.uniform(0, 2*np.pi, (2**num_qubits)) - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: ', i) - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Walternating_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.pinv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [4] - num_qubits = [4] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append( - multiprocessing.Process(target=run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_5layers.py deleted file mode 100644 index d70fa936..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Walternating_sgd_5layers.py +++ /dev/null @@ -1,70 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing -def run_walternating(num_layers, num_qubits): - - thetas = np.ones(int(num_layers*num_qubits / 2) + 3 * num_layers * num_qubits) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_alternating: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Walternating_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Walternating_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - - # Get |psi~> = U_target|000...> - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Walternating_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_walternating_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_walternatings = [] - - for i in num_layers: - for j in num_qubits: - t_walternatings.append(multiprocessing.Process(target = run_walternating, args=(i, j))) - - for t_walternating in t_walternatings: - t_walternating.start() - - for t_walternating in t_walternatings: - t_walternating.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_WchainCNOT_adam.py b/experiments/tomography/multiprocessing_scripts/compare_WchainCNOT_adam.py deleted file mode 100644 index b97567a9..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_WchainCNOT_adam.py +++ /dev/null @@ -1,72 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*3) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_WchainCNOT_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_WchainCNOT_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_WchainCNOT_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [3, 4, 5] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_WchainCNOT_qng.py b/experiments/tomography/multiprocessing_scripts/compare_WchainCNOT_qng.py deleted file mode 100644 index b4b15b4b..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_WchainCNOT_qng.py +++ /dev/null @@ -1,81 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - - -def run_wchain(num_layers, num_qubits): - thetas = np.ones(num_layers*num_qubits*3) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, qubits = range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_WchainCNOT_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_WchainCNOT_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.inv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_WchainCNOT_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_WchainCNOT_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomographyCNOT/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [3, 4, 5] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append( - multiprocessing.Process(target=run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam.py deleted file mode 100644 index a06d9939..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam.py +++ /dev/null @@ -1,71 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam_1layers.py deleted file mode 100644 index 1eaefdb8..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam_1layers.py +++ /dev/null @@ -1,71 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam_5layers.py deleted file mode 100644 index 2e9581c0..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_adam_5layers.py +++ /dev/null @@ -1,70 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state -import multiprocessing -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - if i == 0: - m, v = list(np.zeros(thetas.shape[0])), list( - np.zeros(thetas.shape[0])) - thetas = qsee.optimizer.adam(thetas, m, v, i, grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values_adam.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass_adam.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces_adam.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities_adam.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng.py deleted file mode 100644 index 10fff9d7..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng.py +++ /dev/null @@ -1,87 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Wchain_layerd_state, num_layers) - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.inv(G) @ grad_loss)) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append( - multiprocessing.Process(target=run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng_1layers.py deleted file mode 100644 index 93ff6cd0..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng_1layers.py +++ /dev/null @@ -1,87 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 400): - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Wchain_layerd_state, num_layers) - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.inv(G) @ grad_loss)) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - thetass.append(thetas.copy()) - loss_values.append(loss) - - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append( - multiprocessing.Process(target=run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng_5layers.py deleted file mode 100644 index b4075398..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_qng_5layers.py +++ /dev/null @@ -1,90 +0,0 @@ -import qiskit -import numpy as np -import sys - -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - - - -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - loss_values = [] - thetass = [] - for i in range(0, 400): - - G = qsee.gradient.qng(qc.copy(), thetas, qsee.ansatz.create_Wchain_layerd_state, num_layers) - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - thetas = np.real(thetas - qsee.constant.learning_rate*(np.linalg.inv(G) @ grad_loss)) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - thetass.append(thetas.copy()) - loss_values.append(loss) - - - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state( - qc, thetas, num_layers=num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/loss_values_qng.csv", - loss_values, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/thetass_qng.csv", - thetass, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/traces_qng.csv", - traces, - delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + - str(num_qubits) + "/fidelities_qng.csv", - fidelities, - delimiter=",") - - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append( - multiprocessing.Process(target=run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd.py deleted file mode 100644 index 7d167f1b..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd.py +++ /dev/null @@ -1,69 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1, 2, 3, 4, 5] - num_qubits = [2, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd_1layers.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd_1layers.py deleted file mode 100644 index 023669df..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd_1layers.py +++ /dev/null @@ -1,69 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing - -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [1] - num_qubits = [2, 3, 4, 5, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd_5layers.py b/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd_5layers.py deleted file mode 100644 index 7f85ccb1..00000000 --- a/experiments/tomography/multiprocessing_scripts/compare_Wchain_sgd_5layers.py +++ /dev/null @@ -1,68 +0,0 @@ -import qiskit -import numpy as np -import sys -sys.path.insert(1, '../../') -import qsee.measure, qsee.backend.constant, qsee.ansatz, qsee.gradient, qsee.state - -import multiprocessing -def run_wchain(num_layers, num_qubits): - - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc.initialize(psi, range(0, num_qubits)) - - loss_values = [] - thetass = [] - - for i in range(0, 400): - if i % 20 == 0: - print('W_chain: (' + str(num_layers) + ',' + str(num_qubits) + '): ' + str(i)) - - grad_loss = qsee.measure.grad_loss( - qc, - qsee.ansatz.create_Wchain_layerd_state, - thetas, num_layers = num_layers) - thetas -= qsee.constant.learning_rate*(grad_loss) - thetass.append(thetas.copy()) - qc_copy = qsee.ansatz.create_Wchain_layerd_state(qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure(qc_copy, list(range(qc_copy.num_qubits)))) - loss_values.append(loss) - - traces = [] - fidelities = [] - - for thetas in thetass: - qc = qiskit.QuantumCircuit(num_qubits, num_qubits) - qc = qsee.ansatz.create_Wchain_layerd_state(qc, thetas, num_layers = num_layers).inverse() - psi_hat = qi.Statevector.from_instruction(qc) - # Calculate the metrics - trace, fidelity = qsee.measure.get_metrics(psi, psi_hat) - traces.append(trace) - fidelities.append(fidelity) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + ' qubits') - - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/loss_values.csv", loss_values, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/thetass.csv", thetass, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/traces.csv", traces, delimiter=",") - np.savetxt("../../experiments/tomography/tomography_wchain_" + str(num_layers) + "/" + str(num_qubits) + "/fidelities.csv", fidelities, delimiter=",") - -if __name__ == "__main__": - # creating thread - - num_layers = [5] - num_qubits = [2, 3, 4, 5, 6] - t_wchains = [] - - for i in num_layers: - for j in num_qubits: - t_wchains.append(multiprocessing.Process(target = run_wchain, args=(i, j))) - - for t_wchain in t_wchains: - t_wchain.start() - - for t_wchain in t_wchains: - t_wchain.join() - - print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/run_Wchain_adam_noise.py b/experiments/tomography/multiprocessing_scripts/run_Wchain_adam_noise.py deleted file mode 100644 index 59c76314..00000000 --- a/experiments/tomography/multiprocessing_scripts/run_Wchain_adam_noise.py +++ /dev/null @@ -1,30 +0,0 @@ -import qiskit, sys -import numpy as np -sys.path.insert(1, '../../') -import qsee.compilation.qcompilation, qsee.ansatz - - -def run_wchain(num_layers, num_qubits): - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - u = qiskit.QuantumCircuit(num_qubits, num_qubits) - u.initialize(psi, range(0, num_qubits)) - - compiler = qsee.compilation.qcompilation.QuantumCompilation( - u = u, - vdagger = qsee.ansatz.create_Wchain_layered_ansatz, - optimizer = 'adam', - loss_func = 'loss-fubini-study', - thetas = thetas, - num_layers = num_layers - ) - - compiler.fit(num_steps=400, verbose = 1) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - compiler.save(text=str(qsee.constant.noise_prob), save_all = True) - -run_wchain(2, 5) -print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/run_Wchain_adam_noise_mitigating.py b/experiments/tomography/multiprocessing_scripts/run_Wchain_adam_noise_mitigating.py deleted file mode 100644 index 4ce9c9be..00000000 --- a/experiments/tomography/multiprocessing_scripts/run_Wchain_adam_noise_mitigating.py +++ /dev/null @@ -1,30 +0,0 @@ -import qiskit, sys -import numpy as np -sys.path.insert(1, '../../') -import qsee.compilation.qcompilation, qsee.ansatz - - -def run_wchain(num_layers, num_qubits): - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - u = qiskit.QuantumCircuit(num_qubits, num_qubits) - u.initialize(psi, range(0, num_qubits)) - - compiler = qsee.compilation.qcompilation.QuantumCompilation( - u = u, - vdagger = qsee.ansatz.create_Wchain_layered_ansatz, - optimizer = 'adam', - loss_func = 'loss-fubini-study', - thetas = thetas, - num_layers = num_layers - ) - - compiler.fit(num_steps=400, verbose = 1) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - compiler.save(text=str(qsee.constant.noise_prob) + "mitigating", save_all = True) - -run_wchain(2, 5) -print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/run_Wchain_qng_noise.py b/experiments/tomography/multiprocessing_scripts/run_Wchain_qng_noise.py deleted file mode 100644 index d1c2a6d8..00000000 --- a/experiments/tomography/multiprocessing_scripts/run_Wchain_qng_noise.py +++ /dev/null @@ -1,30 +0,0 @@ -import qiskit, sys -import numpy as np -sys.path.insert(1, '../../') -import qsee.compilation.qcompilation, qsee.ansatz - - -def run_wchain(num_layers, num_qubits): - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - u = qiskit.QuantumCircuit(num_qubits, num_qubits) - u.initialize(psi, range(0, num_qubits)) - - compiler = qsee.compilation.qcompilation.QuantumCompilation( - u = u, - vdagger = qsee.ansatz.create_Wchain_layered_ansatz, - optimizer = 'qng-fubini-study', - loss_func = 'loss-fubini-study', - thetas = thetas, - num_layers = num_layers - ) - - compiler.fit(num_steps=400, verbose = 1) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - compiler.save(text=str(qsee.constant.noise_prob), save_all = True) - -run_wchain(2, 5) -print("Done!") \ No newline at end of file diff --git a/experiments/tomography/multiprocessing_scripts/run_Wchain_qng_noise_mitigating.py b/experiments/tomography/multiprocessing_scripts/run_Wchain_qng_noise_mitigating.py deleted file mode 100644 index aef0a6f7..00000000 --- a/experiments/tomography/multiprocessing_scripts/run_Wchain_qng_noise_mitigating.py +++ /dev/null @@ -1,30 +0,0 @@ -import qiskit, sys -import numpy as np -sys.path.insert(1, '../../') -import qsee.compilation.qcompilation, qsee.ansatz - - -def run_wchain(num_layers, num_qubits): - thetas = np.ones(num_layers*num_qubits*4) - psi = 2*np.random.rand(2**num_qubits)-1 - psi = psi / np.linalg.norm(psi) - u = qiskit.QuantumCircuit(num_qubits, num_qubits) - u.initialize(psi, range(0, num_qubits)) - - compiler = qsee.compilation.qcompilation.QuantumCompilation( - u = u, - vdagger = qsee.ansatz.create_Wchain_layered_ansatz, - optimizer = 'qng-fubini-study', - loss_func = 'loss-fubini-study', - thetas = thetas, - num_layers = num_layers - ) - - compiler.fit(num_steps=400, verbose = 1) - print('Writting ... ' + str(num_layers) + ' layers,' + str(num_qubits) + - ' qubits') - - compiler.save(text=str(qsee.constant.noise_prob) + "mitigating", save_all = True) - -run_wchain(2, 5) -print("Done!") \ No newline at end of file diff --git a/experiments/tomography/plot_compareW.ipynb b/experiments/tomography/plot_compareW.ipynb index c62165af..21c4942c 100644 --- a/experiments/tomography/plot_compareW.ipynb +++ b/experiments/tomography/plot_compareW.ipynb @@ -35,7 +35,7 @@ }, { "data": { - "image/png": "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bbrqJO++8k7S0NObNm4cxhrlz5/LMM88wcOBA3nvvvVKrigCefvppjDHcd999AIwcOZKFCxcyYMCAen8/SqngIMZU/T0rIlnAEmPM5DLtzwHXGWNa+rUgkceAu4FxxpgF/haYkpJi0tPTK52+bds2unfv7u/LqQamfx+lrCEiXxtjUvyZ158RwRa82wnK6gFs9bOg+4A/A7+vSQgopZSqf/5sLH4XOFdEOhU1iEgScL5vWpVE5A/Aw8B9xphnTrNOpZRS9cSfIHgR2AW8IyJXicgo4B1gD/B80Uwi0lFECkVkZom2G4E5wFJghYicW+JW4z2OlFJK1b1qVw0ZY3JF5GK8p5hYgPcUE8vxnmKi5A7pAtgpHS6X+dov891KWgUMPe3KlVJK1Qm/9hrynVPommrm2YX3S79k263AradXmlJKqYagZx9VSqkQp0GglFIhToNAKaVCnAaBUkqFOA0CpZQKcRoEAeyjjz7i8ssvp3nz5kRGRtK1a1emT59e6joFAElJSYgIM2eWv7zDjBkzEJFy7S6Xi3/9619ccMEFxMfH43A4aN26NVdccQULFiygsLCwvt6WUirAaBAEqEceeYQRI0YQGRnJ3LlzWbZsGZMnT+all15iwIABZGZmluszZ84cDh48WO1rHz9+nIsuuog777yTvn37kpaWxvLly3niiSeIiYlh/Pjx/Oc//6mPt6WUCkTGmIC+9evXz1Rl69atVU4PRitWrDAiYqZOnVpu2o8//mji4+PNpZdeWtzWsWNHM2TIEBMREWHuvPPOUvPfd999xvtn/sW4ceNMRESEWbNmTYXLX79+vVm9enUdvJPG+fdRKhgA6cbP71kdEVQgOy+bW5feysH86n9d14e///3vNGvWjEcffbTctOTkZKZPn87HH3/M+vXri9vbt2/PlClTeO655yocLRTJzMzk1VdfZfLkyQwcOLDCefr27cugQYNq/0aUUkFBg6ACqd+ksj5rPambUht82YWFhaxatYpLL72UyMjICucZNWoUAJ988kmp9nvvvZewsDAeeuihSl//008/xe12c8UVV9Rd0UqpoNbQF6ZpELO+msV3h787rb4F7gI2H9yMwfDW9rf47tB3OOyO6juW0a1ZN/484M817nfo0CHy8/NJSkqqdJ6iaT/99FOp9pYtWzJ16lRmzZrFtGnTOOOMM8r13bt3L1D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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAERCAYAAAB2CKBkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0FklEQVR4nO3deXhTZfr/8fedNG3TDcpSyt4iyCYCUkARERVBGUXGXRlBBGT4OjM/xhEHlUEdHZURlRmXqQpoRUUdB3AdUAEZRUEqiwiIoEWgSClroS00TZ7fH0lr96Z0OUlzv64rV5LnnCfnTgr55DmrGGNQSikVumxWF6CUUspaGgRKKRXiNAiUUirEaRAopVSI0yBQSqkQF2Z1AdVp0aKFSUpKsroMpZQKGi1atGDZsmXLjDGX+TN/wAdBUlIS6enpVpehlFJBRURa+DuvrhpSSqkQp0GglFIhToNAKaVCnAaBUkqFOL+CQETaicjTIvKliOSJiBGRJD/72kTkHhHZJSInRWSTiFxTq6qVUkrVGX9HBJ2B64EjwGc1XMZDwAPAM8DlwBrg3yIysoavo5RSqh74u/vo/4wxrQBEZCIw3J9OIpIA3AU8ZoyZ7WteKSKdgceAD2tYb8Ue7wK5B8i225jWsgWzsw/Swu2B6ASYtqNOFtGo6edXe77PsBz9DFUQ8CsIjDGe03z9EUA48GqZ9leB+SKSbIzJOM3X/oXvP+CzTZuwPjKC55o24d5DR7DlHsDmyq/1y9ctsbqA8nyfX6rv80tt2oQZh4542wtPlZixktqlqvdU0z41nL/KZTegikKgqnalAkh9H1DWEzgF7CzTvsV33wOofRAA2XYb/4mNARH+HRfLv+NivRNeH4DNGGx4v2KKHtsAmwHBYC+eBjZMiWne5/YSj4vm8/b5ZV5b0fTix77X8vW1A1Ji2QLYje/1yi7bN291dZVcdlEtdlOzumyALTqKEzZhUWwMRrz3g/PyaVfoJubR1sR4PET5am8c6jmcynp+CDiiweGE8KgSj333jqjSjx1RZeYr08dm92+5SvmpvoOgGXDUlL/6zeES08sRkduB2wE6dOjg14JSmzbBDrjxftn3OFXAkPx8fojrjwcwxoMbg8eAB4PHePAAbmPwYDAYPL7HHmMw+Obz3Ywx3vkxFBa1gbefr/8vzwHxPReDEe/bL36O77nwSz8p6l2y3fttXTTFSFHPX17HQJ0PMlwi/D4xoVx7tDiIsXlv0bbw4scx4iC66LGvPdrXHiMlntscRIkDW2X1VnqRpEraq7yoUk371HL+z56ovJSYRHDlwcmjkLMPXLngyoeCPG97ZcuujD28ivCo7rEffeyOmtVTV3T1mmUC8hQTxpgXgBcAUlJSqv1fkm238U5MNG7fLzSPCDvCHTx9IJsWUxfVb7FleDwGtzEUug2FHg9uj6HQU/Pnbt/zQo/xtlXxvLDQ43vspsDjptDtfVx0c7k9uD2e0s+N97nb4+G+A+OZ0LoVBSW+oR3GMP3QYQovn4PL5HPCdYITBSfIdeUWPz7hymW/6wQnCnI4cfIEeYV51X4+ghDtiCbaEU2MI4aY8BhiHDHe577HRc9jw2OL54sOjybWEVs8nzPMiU0CaIxSVRCMeavyacZA4clfQsGVBwW+oCh+nlc+PIrbS9xO5sDx/eWn1XTNrs1ROiAqDAynd5RS7nHRrWjEU0GfsPCKl6ur1yxT30FwBGgqIlJmVFA0EjhcQZ8aS23aBE+Zn8UexLuuuy4WUAM2m2BDcNjBu0Io8D30dHT536QGvg8P5803m3DjgLMYNyiJdvFRVb6O2+MmtzCX3AJvWOS6cjlecLw4PCp7nlOQw77cfeQW5HLcdZz8wuq36whSHBCVBUl1z2PDY3GGOZE63M5QboN7tW9EfF+QTqB5ndVRzBjvdp7KwqOyYKnoccEJyM32BVWeL5hywbhrVpMtrOLAUJap7yDYAkQAZ1B6O0EP3/3WuljIJmc0rjLrG1w2YaMzui5evtHbGBlV4ee3PjKKod0SmL96F/NX7+KysxKZMDiZczrEV/g6dpuduPA44sLjalVPyUA57vIFR8EJ70jEdaI4aMqOUo6dPEbm8czi5/4Eik1sRId5Q6LC0UcFo5Foh++5L4RiHDE4oxOQ3APlN7hHl1/F1qBEwBHpvVW8JrZ2jAG3yztiKfCFQ/HjvNKBUSpY8sv3UZaRml683rf76ItAsjFmVzXzJgB7gb8ZYx4s0f4J0MoY06u65aWkpBg9+2j9W7Ihk8eXbWff0XzaNHUybURXRvdtC8C+o/mkfbmLhWt3k3OykL4dmjJxcCdG9GxFmD2AVs+UUegpJNeVW2Z1lh8jlRJBk+vK9TtQnGFOcn1faDZsXHHGFSQ3SSYxOpHW0a1JjE4kISoBh82idfCB7oEmVUw71nB1NBIi8rUxJsWvef0NAhG51vfwEuC3wP8B2UC2MWaVb55CIM0YM6FEv8eAqcC9wHrgBmAyMMoY8351y9UgCBy5pwp5++u9vLQ6g12H8mjb1Mmtg5K4YUB74iIb75dbUaBUvJ3klyBZuWclPxz9oXhnAIfNgcvjKvVagtDC2YLE6EQSoxNpFdWq+HFidCKJUYm0cLbAHop7BmkQ1Kn6CoLKZlxljBlaYp40Y8ytJfrZgXuASUAisB34qzHmbX+Wq0EQeNwew/JtWcz7PIO1GYeJDrdzff/2jB+UTIfmobmuNzsvm8sXXc4p9y/HXUTYI1g8ajEuj4v9ufvZn7ffe1908z0vO+IIkzBaRrUsDobE6ERaRbcqFRbNIpvV6baNgKB7DdWpegkCq2gQBLZvM48x//MM3t20D48xXNqjFRMGd6J/Unzj+6KqwkNrHmLxjsWlRgAOm4Oru1zNjHMr32XBGENOQQ77c/eTlZfFzyd+LhcYWXlZ5UYW4bbwX8IhKrH0qMJ3i3XEhtTfQJWmQaAaXFbOSV75chevrd3N0TwXZ7drwoTByYzs1RpHAG9HqCvXvnst249sL9feNb4rb4/ya/BbKY/xcPjkYbJysyodWWTnZeMus/dOVFhUudVOpUYXUYlE6d46jZYGgbJMfoGbRRv2Mu/zDH7MziUxLpJxg5K4eUAHmkQ13u0IViv0FHIw/2BxMBSHRomwOJh/sFy/uPC4ckFR8nmr6FaE2yvZ718FNA0CZTmPx7Dq+2zmfv4jq3cewumwc22/dow/P4lOLWOsLi8kudwusvLKjyqycrOKnx89dbRcv2aRzYqDoXVM63KB0cLZgjBbQB6bGtI0CFRA2fZzDvM/z+CdjftweTxc0i2B2wYnc16n5roOO8DkF+aXG0mUGl3k7S/eRbaITWy0dLasfGQR7d247e+R4Nl52Uz73zRmXzibFk6/r7+uytAgUAEp+/gpFqz5idfW/MSh3AJ6tI5jwuBkruzdhvCwxr8dobE4XnC83J5PZUcWJfeeAu+G84SohCpXQzWJaIKI8NCah/j39n9zfdfrq9zQrqqmQaAC2kmXm3c2ZjL3swx2HDhBy9gIxp3XkZsHdqRZtK6PDnbGGI6eOlphWBTtBZWVm0WhKSzVzxnmpHlkczJPZGIwRNgjWHrNUh0VnCYNAhUUjDF8tuMg8z7PYNX32USE2bj6nHZMGJxE54RYq8tT9chjPBzKP1QuKFbsXsHeE3sB/3a/VZXTIFBBZ0fWceavzmDR+kxOFXoY2rUlEwYnM7hzC92OECIqOyhPRwWnpyZBoCtmVUDo0iqWR68+my+mX8ydl57Jt5k53DLvKy6b8xlvrtvNSVcNz3Cpgk7qN6l4ypwy22M8pG5Ktaii0KFBoAJK85gI/nBJF1ZPv4jZ1/XGZhP+/J/NnP/YCp76+Huyj5+q/kVUUNp0YFO5I6hdHhcbD2y0pqAQoquGVEAzxvDlD4eY93kGy787QLjdxui+bZgwuBNdE3U7glKVqcmqIT0KRAU0EWFQ5xYM6tyCH7JP8NLqDN7+ei9vpe9lcOcWTLggmQu7tMRW6fUvlVLV0RGBCjpH8wp4/avdpH2xi6ycU5zRMprbBidzdd92OMND8PTNSlVA9xpSIaGg0MOHm39m7uc/8m1mDvFRDsYM7MjY8zqSEBdpdXlKWUqDQIUUYwxfZRxm3ucZfLwtizCbcOXZbbhtcDJnta3iYidKNWK6jUCFFBFhYKfmDOzUnJ8O5fLS6l28lb6HRRsyObdTMyYM7sQl3RJ0O4JSldARgWqUjuW7eHPdbl5evYt9x06S3CKa8ecncW2/dkSF6+8f1fjpqiGlfArdHv777X7mfZ7Bxj1HiYsM4+aBHRk3qCOtmzitLk+peqNBoFQFvv7pCPM+/5Gl3+7HJsLIXq2ZMDiZ3u2bWl2aUnVOtxEoVYF+HePp17Efew7nkfbFLt5Yt4d3N+2jf1I8EwYnc2mPROy6HUGFIB0RqJB1/KSLt9L38tLqDPYeyad9MyfjByVzff/2xETobyQV3HTVkFI14PYYPtri3Y6Q/tMRYiPCuKF/e249P4l28XpxdxWcNAiUOk0b9xxl3ucZfLj5Z4wxXH5Wa24bnEy/jvFWl6ZUjWgQKFVL+47mk/blLhau3U3OyUL6tG/KxAuSuaxnImF2PWmvCnwaBErVkdxThbz9tXc7wq5DebRt6mTcoI7c0L8DTZwOq8tTqlIaBErVMbfHsOK7A8z97EfWZhwmOtzOdSntGX9+Eh2bR1tdnlLlaBAoVY++zTzG/M8zeHfTPtzGMLxHKyYM7kTmkTxmf/Q9+47m06apk2kjujK6b1ury1UhSoNAqQaQlXOSV77cxWtrd3M0z4UIlPzv5HTYefTqXhoGyhJ1fs1iEWkvIm+LyDERyRGRRSLSwc++HUQkTUR2i0i+iHwvIg+LiI6nVVBrFRfJtBHd+HL6JTR1Oij7myrf5ebxZdutKU6pGqj2qBkRiQJWAKeAcYABHgZWisjZxpjcKvpGA58ADuAvwG6gP/Ag0AW4obZvQCmrOcPtHMt3VTht39H8Bq5GqZrz5/DJSUAnoKsxZieAiHwD7AAmA09W0fd8vF/4I4wxH/naVopIM+AuEYkyxuSddvVKBYg2TZ1kVvCln9hEL5CjAp8/q4ZGAWuKQgDAGJMBrAauqqZvuO8+p0z7Ud+y9cQuqlGYNqIrTkf5y2RGOmzkFRRaUJFS/vMnCHoC31bQvgXoUU3fT/COHGaJSA8RiRGRi4H/B6RWtVpJqWAyum9bHr26F22bOhHwHm9wXkd+OpTH7a98zUmX2+oSlaqUP6uGmgFHKmg/DFR53L0x5qSIDAb+gzc4iswFfldZPxG5HbgdoEMHv7ZJK2W50X3blttDqFe7ptz170387vX1/Os3/XDoUckqANXrv0oRiQTeBBKAW4ALgWl4NxI/W1k/Y8wLxpgUY0xKy5Yt67NEperVtf3a8dBVPflk2wH++OZG3J7A3l1bhSZ/RgRHqPiXf2UjhZImAEOBzsaYH3xt/xORY8ALIpJqjNnkb7FKBaNbzksir8DNo//9DqfDzqxrztbrJ6uA4k8QbMG7naCsHsDWavr2Ao6UCIEiX/nuuwMaBKrRm3zhGeQVuPnH8h1Ehdt5YFRPRDQMVGDwZ9XQu8C5ItKpqEFEkvDuGvpuNX33A/Ei0rlM+0DffaafdSoV9KYO68KkC5JJ+/InZi3dTqAf1a9Chz9B8CKwC3hHRK4SkVHAO8Ae4PmimUSko4gUisjMEn1fBo4DH4rIOBG5SESmAbOBr/HugqpUSBAR7h3ZnTEDO5C66geeXbmz+k5KNYBqVw0ZY3J9u3w+BSzAu+//cmCqMeZEiVkFsFMiXIwxu0TkXOABvEcjt8AbIC8AfzPGeOrofSgVFESEh646i/wCN7M/+h5neBgTBidbXZYKcX5dmNUYsxu4ppp5dlHBAWLGmK3A9adTnFKNkc0m/P3as8l3uXno/a1Ehdu5aYDuJq2sozs1K2WBMLuNf9zYl6FdW3Lv4s0s2aCby5R1NAiUskh4mI3U3/RjYHIz/vTvTSz9dr/VJakQpUGglIUiHXbmjuvP2e2a8PuF6/l0+wGrS1IhSINAKYvFRITx8vgBdEmIZfKCr1nz4yGrS1IhRoNAqQDQxOlgwYQBtG8WxYSX17Fhd3UH7StVdzQIlAoQzWMieG3iQJrHRDBu/lds3Vf27O1K1Q8NAqUCSKu4SF6bOJCYiDBumbeWnQdOVN9JqVrSIFAqwLRvFsWrEwciIoyZu4bdh/Qifqp+aRAoFYA6tYzh1YkDOFXo4ea5a/j5mF77WNUfDQKlAlS3xDheuW0AR/NcjHlxLdnHT1ldkmqkNAiUCmBnt2vKS+P78/Oxk9wyby1H8wqsLkk1QhoESgW4/knNeHFsCj9m5zJu/lccP+myuiTVyGgQKBUEBndpwXNjzmHLvhwmvJxOfoHb6pJUI6JBoFSQGNajFU/d0Id1Px3m9gXpnCrUMFB1Q4NAqSByZe82zLrmbD7bcZDfvb4Bl1sv6aFqT4NAqSBzfUp7HhzVk4+3ZvGntzbh9uglL1Xt+HVhGqVUYBk3KIm8Ajezln6H02Hn0at7YbOVuy6UUn7RIFAqSE0ZegZ5BYU8vWInznA791/ZAxENA1VzGgRKBbE7Lz2T3FNu5q/OICYijLtGdLW6JBWENAiUCmIiwl+u6E6+y80zK70jgzsu6mx1WSrIaBAoFeREhIdHn0V+QSGPL9tOVLid8ecnW12WCiIaBEo1AnabMPu63uS73Dz43laiwu3c0L+D1WWpIKG7jyrVSITZbfzzpr5ceGZLpi/azDsbM60uSQUJDQKlGpGIMDupv+nHgKRm3PnWJj7ast/qklQQ0CBQqpFxhtuZd2t/erVtwu9e38D/vs+2uiQV4DQIlGqEYiLCSBs/gDMSYrh9QTpfZRy2uiQVwDQIlGqkmkQ5WDBhAG2bOrnt5XVs2nPU6pJUgNIgUKoRaxETwWsTzyU+2sHY+V+x7eccq0tSAcivIBCR9iLytogcE5EcEVkkIn7vmyYi3UXk3yJyUETyRWS7iPy/0y9bKeWvxCaRvD7xXJwOO7fMW8sP2SesLkkFmGqDQESigBVAN2AccAvQBVgpItF+9E8B1gIRwERgJPAEYD/9spVSNdG+WRSvTRoIwJgX17LncJ7FFalA4s+IYBLQCRhtjFlijHkHGAV0BCZX1VFEbMArwHJjzChf/5XGmBeMMU/WtnillP/OaBnDggkDyXe5GTN3LfuPnbS6JBUg/AmCUcAaY8zOogZjTAawGriqmr5Dge6AfukrFQC6t47jldsGcDi3gDFz13DwxCmrS1IBwJ8g6Al8W0H7FqBHNX0H++4jRWSNiLhE5ICI/FNEnDUpVClVN3q3b8q8cSlkHs3nlnlfcSzPZXVJymL+BEEz4EgF7YeB+Gr6tvHdvwl8BFwK/B3vtoLX/axRKVXHBnZqzvO3pPDDgROMe+krTpwqtLokZaH63n206PVfNcbMNMZ8aoyZDTwIjBaR7hV1EpHbRSRdRNKzs/WoSKXqw4VntuSZm/uyOfMYE15eR36B2+qSlEX8CYIjVPzLv7KRQkmHfPcfl2n/yHfft6JOvo3JKcaYlJYtW/pRolLqdAzvmciT1/fmq12H+e2rX3OqUMMgFPkTBFvwbicoqwew1Y++VfH4sXylVD26qk9bHru6F6u+z+YPCzdQ6Nb/lqHGnyB4FzhXRDoVNYhIEnC+b1pV/gucAkaUab/Md5/uX5lKqfp0Q/8OzLyiB8u2ZHHXvzfh8RirS1INyJ8L07wI/A54R0RmAAZ4CNgDPF80k4h0BH4A/mqM+SuAMeaQiDwK/EVEcvAemJYCzATSSu6SqpSy1m2Dk8l3uXl82Xac4WE88uuzEBGry1INoNogMMbkisjFwFPAAkCA5cBUY0zJY9UF79HCZUcZfwWOA/8H3AX8DDyON0yUUgHkjos6k1dQyLMrfyAq3M6MX3XXMAgBfl2q0hizG7immnl24Q2Dsu0G7wFlelCZUkHgruFdyT3lZt7nGUSH27lzeFerS1L1TK9ZrJQqRUSYeUUP8gvc/HPFTpzhYUwZeobVZal6pEGglCrHZhMeuboX+S43s5Z+R3SEnbHnJVldlqonGgRKqQrZbcIT1/cm3+Vm5jtbiHTYuT6lvdVlqXqgF6ZRSlXKYbfxzM19uaBLC6b/5xve27TP6pJUPdAgUEpVKSLMzgu3pJDSsRl/fHMjn2zNsrokVcc0CJRS1XKG25l3awo928Txf6+v5/MdB60uSdUhDQKllF9iIx2k3TaATi2imfRKOut2Hba6JFVHNAiUUn5rGhXOggkDad0kktteWsc3e49aXZKqAxoESqkaaRkbwWuTBtIkysHY+V+xff9xq0tStaRBoJSqsdZNnLw2cSARYTbGzF1LxsFcq0tStaBBoJQ6LR2bR/PaxIEYYxjz4hr2HsmzuiR1mjQIlFKnrXNCLK9MGMCJU4WMmbuWrJyTVpekToMGgVKqVnq2acLLtw3g4PFT/GbuWg6dOGV1SaqGNAiUUrV2Tod45o7rz+7DeYyd/xXH8l1Wl6RqQINAKVUnzjujOc/f0o/vs44z/qWvyD1VaHVJyk8aBEqpOjO0awJP33QOm/YeY2JaOiddbqtLUn7QIFBK1anLzkpk9nVnsybjEFNe/ZqCQo/VJalqaBAopercr/u242+je7FyezZT39xAoVvDIJDp9QiUUvXi5oEdyCso5OEPthEZ9g2zr+uNzabXPw5EGgRKqXoz8YJO5Be4eeLj73GG23l49FmIaBgEGg0CpVS9+t3FncktcJO66geiwu3cO7K7hkGA0SBQStUrEeHPl3Ulr6CQFz/LIDoijKnDzrS6LFWCBoFSqt6JCA9c2ZO8AjdzPtlBVLid24ecYXVZykeDQCnVIGw2YdY1Z3PS5eaRD7/DGR7GLed2tLoshQaBUqoB2W3CUzf04aTLzV+WfIvTYefafu2sLivk6XEESqkG5bDbeObmczi/c3PufnsTH27+2eqSQp4GgVKqwUU67Lw4NoVzOsTzh4UbWPFdltUlhTQNAqWUJaLCw5g/vj/dW8fx21fX88XOg1aXFLLEGGN1DVVKSUkx6enpVpehlKonR3ILuPGFNew5ksekC5J5++tM9h3Np01TJ9NGdGV037ZWlxiURORrY0yKP/P6NSIQkfYi8raIHBORHBFZJCIdTqOw6SJiROTzmvZVSjVO8dHhLJg4gCiHjX8s30nm0XwMkHk0n3sWbWbJhkyrS2z0qg0CEYkCVgDdgHHALUAXYKWIRPu7IBHpBMwADpxeqUqpxiohNhK7vfzXUb7LzePLtltQUWjxZ/fRSUAnoKsxZieAiHwD7AAmA0/6uax/Aa8BXf1crlIqhBzIqfgSl/uO5jdwJaHHn1VDo4A1RSEAYIzJAFYDV/mzEBG5GTgHuOd0ilRKNX5tmjpr1K7qjj9B0BP4toL2LUCP6jqLSDzwFHC3MeZwzcpTSoWKaSO64nTYS7U5HXamjehqUUWhw59VNM2AIxW0Hwbi/ej/OPA98LK/RYnI7cDtAB061HibtFIqCBXtHfT4su2611ADq9d19SJyATAWOMfUYD9VY8wLwAvg3X20uvlzcnI4cOAALpfrtGtVdcvhcJCQkEBcXJzVpaggMrpvW/3it4A/QXCEin/5VzZSKOl5YB6wV0Sallim3fc83xhT8RYiP+Xk5JCVlUXbtm1xOp16nvMAYIwhPz+fzEzvbn8aBkoFNn+2EWzBu52grB7A1mr6dgd+izcwim7nA+f6Hk/xu9JKHDhwgLZt2xIVFaUhECBEhKioKNq2bcuBA7q3sFKBzp8RwbvAbBHpZIz5EUBEkvB+oU+vpu9FFbTNAezA74GdFUyvEZfLhdOpexUEIqfTqavrlAoC/gTBi8DvgHdEZAZggIeAPXhX/QAgIh2BH4C/GmP+CmCM+bTsi4nIUSCsommnS0cCgUn/LkoFh2pXDRljcoGL8e75swDvQWEZwMXGmBMlZhW8v/T1RHZKKRVE/NpryBizG7immnl24Q2D6l5rqD/LVEop1TD013sAWrJkCUOGDCEhIQGn00nHjh0ZPXo0S5cuLTfv1q1bue2220hOTiYyMpKYmBh69+7NnXfeyc6dpTfBJCUlISKICGFhYTRv3pyBAwcyffp0du3a1UDvTikVaDQIAsw///lPfv3rX9OlSxfmzZvHBx98wIwZMwBYsWJFqXnfeOMN+vbty6ZNm5g+fTpLly5l0aJF3HDDDSxZsoQrr7yy3OuPGDGCL7/8ks8++4xXX32VUaNG8cYbb3DWWWexePHiBnmPSqkAY4wJ6Fu/fv1MVbZu3Vrl9GDTvn17M3r06Aqnud3u4sfbtm0zERER5pprrjGFhYXl5i0oKDCpqaml2jp27GjGjBlTbt7jx4+bQYMGGafTafbs2VPLd1BaY/v7KBUsgHTj5/esjgjKWLIhk/MfW0Hy9A84/7EVDX4u9MOHD5OYmFjhNJvtlz/XnDlz8Hg8PPvss9jt9nLzOhwOJk+e7NcyY2JieO6558jPz+f555+vvoNSqlHR00GXsGRDJvcs2ky+yw38cmEMoMEOex8wYABpaWl06tSJq666ijPPPLPC+ZYvX07//v1p1apVnSy3d+/etGnThtWrV9fJ6ymlgkejDIIH39vC1n05Ne63YfdRCtyeUm35Ljd3v/0NC7/aXaPX6tEmjvuvrOiA7KqlpqZy7bXXcvfdd3P33XfTvHlzLr30UsaPH8/w4cOL59u7dy8pKeWvQud2uzElTusUFub/n7hDhw78/PPPNa5ZKRXcdNVQCWVDoLr2+nDmmWeyYcMGVq1axX333UefPn1YvHgxI0aM4OGHH662f3R0NA6Ho/hWds+hqhhj9CAwpUJQoxwRnM4vcYDzH1tBZgVXQ2rb1Mmbk8+rbVl+s9vtDBkyhCFDhgCwb98+LrvsMh588EHuuOMO4uPjadeuHbt3lx+lfPHFF3g8Ht5//30efPDBGi13z549dOvWrU7eg1IqeOiIoIRAvTBGmzZtmDhxIoWFhezYsQOAiy++mHXr1pU7qds555xDSkoKSUlJNVrGxo0b2bdvH4MHD66rspVSQUKDoITRfdvy6NW9aNvUieAdCTx6da8GPT96Zevov/vuO4DiPYqmTp2KiHDHHXfgdrtrtcwTJ05wxx13EBUV5feeRkqpxqNRrhqqDasvjHHWWWcxbNgwRo4cSXJyMjk5OXz44YekpqZy/fXXF1+xrXv37syfP5/x48czcOBAJk2aRNeuXXG73WRkZPDCCy/gcDiIjIws9foHDx5kzZo1GGM4duwY69ev58UXXyQ7O5uFCxfSpk0bK962UspCUnIPk0CUkpJi0tPTK52+bds2unfv3oAV1a/U1FQ+/PBDNm3aRFZWFna7nTPPPJObbrqJqVOnEh4eXmr+zZs38+STT7JixQr279+Pw+HgjDPOYNiwYUyZMoXOnTsXz5uUlMRPP/0EeI9JiIuLo3PnzlxyySVMmTKFjh071vn7aWx/H6WChYh8bYwpv2thRfNqEKj6pH8fpaxRkyDQbQRKKRXiNAiUUirEaRAopVSI0yBQSqkQp0GglFIhToNAKaVCnAaBUkqFOA0CpZQKcRoESikV4jQIlFIqxGkQBLBJkyYhIvzxj3/0u4+I8MADD9RfUUqpRkeDIEDl5+fz1ltvAfD6669TWFhocUVKqcZKgyBALVmyhJycHEaOHMmBAwdYunSp1SUppRopDYKSHu8CDzQpf3u8S4OXkpaWRnx8PC+//DJOp5O0tLRS091uNzNmzKB169ZERUUxdOhqseezZUu51du7cyS233EJycjJOp5NOnToxZcoUjhw5Umq+W2+9lXbt2pGens6gQYNwOp107dqVDz74AIAnn3ySpKQk4uLiuOqqq8jOzq6/N6+UalAaBCXlHqhZez3Zt28fn3zyCTfccAMtW7Zk9OjRvPfee6W+vB944AEeeeQRxowZw5IlSxg+fDijRo2q8LXat2/PnDlzWLZsGTNnzmT58uWMHDmy3Lw5OTmMHTuWiRMnsnjxYhISErjmmmv405/+xMqVK3n22WeZM2cOK1eu5I477qjXz0Ap1XD8ukKZiLQHngIuBQT4BJhqjCl/9fTS/VKA24EhQAfgIPAZMMMYk1GLuqv23+mwf3PdvuZLv6rZ/Im94PLHTmtRr776Km63m7FjxwIwbtw4Fi5cyJtvvslvf/tbjhw5wlNPPcXtt9/O7NmzARg+fDh2u53p06eXeq0hQ4YwZMiQ4ueDBg2ic+fOXHDBBWzYsIG+ffsWTzt+/DipqanF87dp04bevXvz/vvvs3XrVux27/Wcv/32W55++mncbndxm1IqeFU7IhCRKGAF0A0YB9wCdAFWikh0Nd1vBHoC/wQuB6YD5wDpvnBRFUhLS6NLly6cd955AAwbNow2bdoUrx7avHkzubm5XH/99aX63XjjjeVeq6CggEceeYRu3brhdDpxOBxccMEFAGzfvr3UvNHR0aVCo1u3bsXLL/mF361bNwoLCyu9vrJSKrj4MyKYBHQCuhpjdgKIyDfADmAy8GQVfWcZY0qtTBaR1UCG73Vnnk7R1TrNX+I80KTyaeM/OL3XrKH09HS2bt3Kn//8Z44ePVrcfvXVV/PMM8/w/fffF38Bt2rVqlTfss8B7rnnHp5++mlmzpzJoEGDiI2NZe/evVx99dWcPHmy1LxNmzYt9bzospjx8fEVtpftr5QKTv4EwShgTVEIABhjMnxf6FdRRRCUDQFf208ikg1Yd4X4AFb0q3/WrFnMmjWr3PRXXnmF4cOHA5CVlUXPnj2Lp2VlZZWb/4033mDs2LHMmDGjuO3EiRN1XbZSKoj5s7G4J/BtBe1bgB41XaCIdAcSgG017VvvohNq1l7HCgoKWLhwIQMHDmTlypXlbn369GHBggX06tWL6Ojo4uMMirzxxhvlXjMvLw+Hw1Gq7aWXXqrX96GUCi7+jAiaAUcqaD8MxFfQXikRCQNSgWxgXhXz3Y53IzMdOnSoySJqZ9qOhltWBT744AMOHTrEE088wdChQ8tNnzx5MlOmTGHjxo388Y9/5G9/+xuxsbEMHz6cdevWMW9e+Y/0sssuIy0tjV69etG5c2cWLVrEF1980QDvRikVLPzaa6gOPQMMAn5ljKkoXAAwxrwAvACQkpJiGqg2y6WlpREbG8t1111X4fSbbrqJO++8k7S0NObNm4cxhrlz5/LMM88wcOBA3nvvvVKrigCefvppjDHcd999AIwcOZKFCxcyYMCAen8/SqngIMZU/T0rIlnAEmPM5DLtzwHXGWNa+rUgkceAu4FxxpgF/haYkpJi0tPTK52+bds2unfv7u/LqQamfx+lrCEiXxtjUvyZ158RwRa82wnK6gFs9bOg+4A/A7+vSQgopZSqf/5sLH4XOFdEOhU1iEgScL5vWpVE5A/Aw8B9xphnTrNOpZRS9cSfIHgR2AW8IyJXicgo4B1gD/B80Uwi0lFECkVkZom2G4E5wFJghYicW+JW4z2OlFJK1b1qVw0ZY3JF5GK8p5hYgPcUE8vxnmKi5A7pAtgpHS6X+dov891KWgUMPe3KlVJK1Qm/9hrynVPommrm2YX3S79k263AradXmlJKqYagZx9VSqkQp0GglFIhToNAKaVCnAaBUkqFOA0CpZQKcRoEAeyjjz7i8ssvp3nz5kRGRtK1a1emT59e6joFAElJSYgIM2eWv7zDjBkzEJFy7S6Xi3/9619ccMEFxMfH43A4aN26NVdccQULFiygsLCwvt6WUirAaBAEqEceeYQRI0YQGRnJ3LlzWbZsGZMnT+all15iwIABZGZmluszZ84cDh48WO1rHz9+nIsuuog777yTvn37kpaWxvLly3niiSeIiYlh/Pjx/Oc//6mPt6WUCkTGmIC+9evXz1Rl69atVU4PRitWrDAiYqZOnVpu2o8//mji4+PNpZdeWtzWsWNHM2TIEBMREWHuvPPOUvPfd999xvtn/sW4ceNMRESEWbNmTYXLX79+vVm9enUdvJPG+fdRKhgA6cbP71kdEVQgOy+bW5feysH86n9d14e///3vNGvWjEcffbTctOTkZKZPn87HH3/M+vXri9vbt2/PlClTeO655yocLRTJzMzk1VdfZfLkyQwcOLDCefr27cugQYNq/0aUUkFBg6ACqd+ksj5rPambUht82YWFhaxatYpLL72UyMjICucZNWoUAJ988kmp9nvvvZewsDAeeuihSl//008/xe12c8UVV9Rd0UqpoNbQF6ZpELO+msV3h787rb4F7gI2H9yMwfDW9rf47tB3OOyO6juW0a1ZN/484M817nfo0CHy8/NJSkqqdJ6iaT/99FOp9pYtWzJ16lRmzZrFtGnTOOOMM8r13bt3L1D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", "text/plain": [ "
" ] @@ -176,12 +176,6 @@ " loss_values = pd.read_csv(path, sep=\",\", header=None).to_numpy()\n", " loss_fubini_study = np.sqrt(loss_values)\n", " loss_fubini_studys.append(np.min(loss_fubini_study))\n", - " if optimizer == 'sgd':\n", - " label = 'SGD'\n", - " if optimizer == 'adam':\n", - " label = 'Adam'\n", - " if optimizer == 'qng':\n", - " label = 'QNG'\n", " plt.plot(range(2, 6), loss_fubini_studys, label=label, marker=marker)\n", "\n", "plt.xticks(np.arange(2, 7, 1), size=16)\n", @@ -231,7 +225,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -401,7 +395,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] diff --git a/experiments/tomography/shadow_tomo/shadow_tomography2.ipynb b/experiments/tomography/shadow_tomo/shadow_tomography2.ipynb index c5b3e718..26f0aa27 100644 --- a/experiments/tomography/shadow_tomo/shadow_tomography2.ipynb +++ b/experiments/tomography/shadow_tomo/shadow_tomography2.ipynb @@ -323,7 +323,7 @@ " thetass.append(thetas.copy())\n", " qc_copy = qsee.ansatz.create_Wchain_layerd_state(\n", " qc.copy(), thetas, num_layers)\n", - " loss = qsee.loss.loss_basis(.measure(\n", + " loss = qsee.loss.loss_basic(.measure(\n", " qc_copy, list(range(qc_copy.num_qubits))))\n", " loss_values.append(loss)\n" ] diff --git a/experiments/tomography/shadow_tomo/shadow_tomography251.py b/experiments/tomography/shadow_tomo/shadow_tomography251.py index bbe2187c..fa4e478b 100644 --- a/experiments/tomography/shadow_tomo/shadow_tomography251.py +++ b/experiments/tomography/shadow_tomo/shadow_tomography251.py @@ -45,7 +45,7 @@ def self_tensor(matrix, n): thetass.append(thetas.copy()) qc_copy = qsee.ansatz.create_Wchain_layerd_state( qc.copy(), thetas, num_layers) - loss = qsee.loss.loss_basis(qsee.measure.measure( + loss = qsee.loss.loss_basic(qsee.measure.measure( qc_copy, list(range(qc_copy.num_qubits)))) loss_values.append(loss) variances = []