diff --git a/tutorials/basic_tutorials/quantumwalk_complex_network/dt_quantumwalk_complex_network.synthesis_options.json b/tutorials/basic_tutorials/quantumwalk_complex_network/dt_quantumwalk_complex_network.synthesis_options.json index 8c071e881..01572fe63 100644 --- a/tutorials/basic_tutorials/quantumwalk_complex_network/dt_quantumwalk_complex_network.synthesis_options.json +++ b/tutorials/basic_tutorials/quantumwalk_complex_network/dt_quantumwalk_complex_network.synthesis_options.json @@ -6,28 +6,28 @@ "preferences": { "custom_hardware_settings": { "basis_gates": [ - "p", - "sdg", "h", - "rx", + "x", "id", - "s", - "sx", + "cy", + "p", "z", - "sxdg", - "t", - "x", + "sx", "r", + "cz", + "cx", "ry", - "u", "u1", "y", - "cy", - "cx", + "u", + "rx", + "sxdg", "tdg", - "cz", - "rz", - "u2" + "t", + "sdg", + "s", + "u2", + "rz" ], "is_symmetric_connectivity": true }, @@ -36,7 +36,7 @@ "optimization_level": 1, "output_format": ["qasm"], "pretty_qasm": true, - "random_seed": 3632070240, + "random_seed": 2498030948, "synthesize_all_separately": false, "timeout_seconds": 300, "transpilation_option": "auto optimize" diff --git a/tutorials/basic_tutorials/quantumwalk_complex_network/quantumwalk_complex_network.ipynb b/tutorials/basic_tutorials/quantumwalk_complex_network/quantumwalk_complex_network.ipynb index a8a6fb881..374e80298 100644 --- a/tutorials/basic_tutorials/quantumwalk_complex_network/quantumwalk_complex_network.ipynb +++ b/tutorials/basic_tutorials/quantumwalk_complex_network/quantumwalk_complex_network.ipynb @@ -8,10 +8,42 @@ "# Quantum walk on complex network" ] }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "## What this notebook does\n", + "\n", + "Quantum walks are often used as building blocks for graph exploration / graph-based quantum algorithms.\n", + "\n", + "This notebook simulates a **discrete-time quantum walk** on a **complex network (graph)**.\n", + "\n", + "- The **graph** is a set of nodes connected by edges (we generate it with NetworkX).\n", + "- The **walker position** is stored in a quantum register `x`.\n", + "- A second register `y` acts like a **coin / direction / neighbor-choice register**.\n", + "- Each step of the walk applies:\n", + " 1. **Coin operator** (mix amplitudes in a way that depends on the current node’s neighbors)\n", + " 2. **Shift operator** (moves the walker according to the coin register)\n", + "\n", + "At the end we **measure** the position register and plot a **probability distribution over nodes**.\n", + "\n", + "\n", + "> Note: This is a *discrete-time* walk (coin + shift), not a continuous-time walk.\n" + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "## Imports and dependencies\n" + ] + }, { "cell_type": "code", "execution_count": 1, - "id": "1", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -22,15 +54,33 @@ "from classiq import *" ] }, + { + "cell_type": "markdown", + "id": "4", + "metadata": {}, + "source": [ + "## Step 1 — Create a “complex network” (the graph)\n", + "\n", + "Here we generate a small graph `G`. The notebook currently uses a **Watts–Strogatz** model, which is a classic “small-world” network model:\n", + "- it has high clustering (like regular lattices),\n", + "- and short path lengths (like random graphs).\n", + "\n", + "You can switch to other models by uncommenting the alternatives:\n", + "- Erdős–Rényi (random graph)\n", + "- Barabási–Albert (scale-free graph)\n", + "\n", + "Then we draw the graph so we can visually connect the output distribution to the network structure.\n" + ] + }, { "cell_type": "code", "execution_count": 2, - "id": "2", + "id": "5", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJZ9JREFUeJzt3QlUVtXaB/CHQVDAGRGnFMQBnEhyyNDrrNhg9mVeNafUHFGXpnkdSnO6pjkEpiQqDpWlDVriAFmKilopoGKpQJqzgiCIICDfera9XEJ8GTznPdP/txbLCc57fKm/e5/97Gdb5ebm5hIAgAFZK30DAABKQQACgGEhAAHAsBCAAGBYCEAAMCwEIAAYFgIQAAwLAQgAhoUABADDQgACgGEhAAHAsBCAAGBYCEAAMCwEIAAYFgIQAAwLAQgAhoUABADDQgACgGEhAAHAsBCAAGBYCEAAMCwEIAAYli2pRFraA7pwIZkyM3PI3t6GPDwqkZOTndK3BQA6pmgAxsbepjVroik0NJ7i41Mo/wnFVlZE7u4VqVcvdxo9ugV5eTkreasAoENWShyMnpCQTKNGhVFY2EWytbWi7Own34Lpz7t1q0tBQd3Iza2SRe8VAPTL4gEYHBxD/v77KTs7x2zwFRaEtrY2FBDQmUaMaC7rPQKAMVh0EWTBgqM0cuQ+ysjILlH4Mf58/jr+er4OAIBmRoA88uPwku56PWj48GaSXQ8AjMciAcjP/Ly8QsQITiply9pSbOxQPBMEAHVPgXnBg5/5PQmv8kZHD6GUFH/xceTIAOrZ083sNfl6fF0AANWOALnUpUmTELOf89JL7pSTk0vnz98hKysrGjKkCU2d2oqefXYTxcYmFnH9YeTpWVXiuwYAI5B9BMh1fryCa84PP8TT7t0JohCaQ3DWrEOiMLpt2xpmv46vu3p1lMR3DABGIXshNBc5l2TF19raivr2bUiOjmUoMvKa2c/l63JwAgCoLgBTUx+IHR7F0bSpM0VGDhCLGzz669NnB509a376y+LiksXnY9scAKhqCszhVNwnjH/8kUTe3puoTZvPaPXqaNq40a9Yz/b4+jx1BgBQ1QiQGxsUV1bWQxGY7MSJG9SqlStNnNiSRo8Ok/R1AAAsMgLkri6lxc8Ci/v1T/M6AGBcso4AuaUVd3Upahq8cGF7sZhx6dJdKl/ejgYM8KSOHetQjx7bi3wNvj6/DgCAqgKQFya4pVVcnPmFEBcXB9q0yY9q1HCklJQHFBNzS4RfePjFIl+jfn30DQQAlZbBcD8/rtUzVwozYsTeUl2b6wD9/MzvGAEAUKwQmre5lbTzS3HxdceM8Zbl2gCgf7IHIHdy5mamRe0GKSm+Hl8X2+AAoLTQDQYADMsi3WC4jT13cpZSYGAXtMICAG10hOY29vPn+0pyrQULfNEMFQCMcyYI0UOysnpIa9b0pLffxsIHAGjwYHQeCXIn506dnhG/LmpxxPTnrVtXIaKllJS0xyL3CQD6p8ixmAXPBeZdIAUbJ/AODy5y5jo/LnXh1d5p06bRypUr6eTJk+Tl5aXUbQOATigagPlxSyvu6sKNDXhvL29vK9ji6v79++Tt7U2VKlWiw4cPk62toue6A4DGqSYAi+vIkSPk6+tLixcvpqlTpyp9OwCgYZoLQDZlyhRatWoVRUVFUePGjZW+HQDQKE0GYHp6OrVo0YKqVatGERERZGODdlgAoIFVYCk4ODjQ+vXr6ejRo2JRBADAMCNAk0mTJlFQUBBFR0dTw4YNlb4dANAYTQfgvXv3xFTY1dWVDhw4gKkwAOh/Cmzi6OhI69atEyUxgYGBSt8OAGiMpkeAJv7+/iIIY2JiyMPDQ+nbAQCN0EUApqWlUfPmzalOnTr0008/kbW1pge2AGAhukgKJycnMQI8ePAgffLJJ0rfDgBohC5GgCZjx46ljRs30qlTp8jd3V3p2wEAldNVAKamplKzZs3Izc2NfvzxR0yFAUD/U2CT8uXLU3BwMP3888+iPhAAwDAjQJNRo0bRZ599RqdPn6Z69eopfTsAoFK6DMC7d+9S06ZNxe6QsLAwsuLmggAAep4Cm1SoUEFMhfk54Nq1a5W+HQBQKV2OAE1GjBhBX375pZgK161bV+nbAQCV0XUApqSkiKmwp6cn7d27F1NhAND/FNikYsWK9Omnn4rngNw+CwDAMCNAk2HDhtE333wjpsK8XQ4AwDABeOfOHTEV5v3CoaGhmAoDgP6nwCaVK1cWU+E9e/aIrXIAAIYZAZoMHjyYdu7cSWfOnKFatWopfTsAoDBDBWBSUhI1adKEfHx86Pvvv8dUGMDgDDEFNqlSpYrYI7xr1y7asmWL0rcDAAoz1AjQ5M033xQhGBsbSzVq1FD6dgBAIYYMwMTERDEVbt26Ne3YsQNTYQCDMtQU2KRq1aq0evVq8Rzw888/V/p2AEAhhhwBmvTv35/27dsnVoX5aE0AMBZDB+Dt27fJy8uLXnjhBbFTBG2zAIzFkFNgE2dnZ3GI0nfffSe6xgCAsRh6BGjyxhtv0P79+8WqsIuLi9K3AwAWggAkops3b4pV4Y4dO9K2bdss9d4DgMIMPQU24VFfYGAgbd++HQEIYCAYAf6NnwS8/vrrFBERIVaFq1Wrpux3BgBkhxHg33gFmBdEcnJyyN/fX/53HgAUhwDMp3r16hQQECBWhLksBgD0DVPgQqbCffr0ocjISLEqzLtGAECfMAIsZCrM2+SysrJowoQJynxXAMAiEICF4A4xK1euFPuEuUgaAPQJU2AzU+FXXnmFfvnlFzEV5l6CAKAvGAGamQpz89TMzEyaNGmSZb8rAGARCEAzatasScuXL6fNmzeL1lkAoC+YAhdjKvziiy9SVFSUKJDmE+YAQB8wAizGVJiP1Lx37x5NnjzZMt8VALAIBGAx1K5dW0yFQ0JCxMHqAKAPmAKXYCrs5+dHp0+fFlPhihUryvudAQDZYQRYwqnw3bt3acqUKfJ+VwDAIhCAJfDMM8/QRx99ROvWraO9e/fK910BAIvAFLgUU+Hu3bvT77//LqbCFSpUkOc7AwCywwiwFFPhtWvXUnJyMk2dOlWe7woAWAQCsBTq1atHS5YsEc8Ew8PDpf+uAIBFYApcSg8fPqSuXbtSXFycWBkuX768tN8ZAJAdRoClfeOsrcViSGJiIk2bNk3a7woAWAQC8Cm4ubnR4sWLac2aNeJYTQDQFkyBJZgKd+7cmS5evEinTp0iJycnab4zACA7jAAlmgrz2cLTp0+X5rsCABaBAJRA/fr1adGiRbRq1So6cOCAFJcEAAvAFFjCqXDHjh3pypUrFBMTQ46OjlJdGgBkghGgxFPhq1ev0owZM6S6LADICAEooQYNGtDChQvF2cIRERFSXhoAZIApsMRycnKoQ4cOYlEkOjqaHBwcpH4JAJAIRoASs7GxofXr19Ply5dp1qxZUl8eACSEAJRBo0aNaN68ebRixQo6cuSIHC8BABLAFFjGqbCvry8lJSWJA5XKlSsn10sBQClhBCjzVJh3iLz33ntyvQwAPAUEoIw8PT1p7ty5tGzZMjp69KicLwUApYApsMyys7OpXbt2lJqaSidPnqSyZcvK/ZIAUEwYAcrM1taWNmzYQPHx8TRnzhy5Xw4ASgABaAFNmjSh999/X3SRPn78uCVeEgCKAVNgC06F27ZtS/fv36cTJ06Qvb29pV4aAJ4AI0ALT4XPnz9PH3zwgaVeFgDMQABaULNmzWj27Nmii/Rvv/1myZcGgEJgCmxhWVlZ1Lp1azEl5hC0s7Oz9C0AwN8wArSwMmXKUEhIiDhYff78+ZZ+eQDIBwGogBYtWohGCdw6i2sDAUAZmAIr5MGDB9SqVSuysrISpTGYCgNYHkaACuHA46kwH6rO54kAgOUhABX07LPPivb5/CyQm6cCgGVhCqyCqbCPj4+oE+SpMC+SAIBlYASogqkwF0jzoepcHwgAloMRoErMnDlT7BXm2kAumAYA+SEAVSIzM5NatmwpOkdz70CeEgOAvDAFVglujsBTYa4L5JEgAMgPI0CVmT59Oi1fvlx0jOE2WgAgHwSgymRkZIjymPLly4sT5TAVBpAPpsAqwy3zeSrMiyF8lggAyAcjQJWaOnUqBQQEiGeCfLgSAEgPAahS3Dna29ubqlSpQocOHRLHbAKAtDAFVikuh+Gp8LFjx2jFihVK3w6ALmEEqHKTJ0+m1atXU1RUFDVq1Ejp2wHQFQSgyqWnp4v+gS4uLnTw4EFMhQEkhCmwyjk4OND69espMjKSPv74Y6VvB0BXMALUiIkTJ9LatWtF26wGDRoofTsAuoAA1Ih79+5R8+bNqWbNmnTgwAGytsbgHeBp4f8ijXB0dBRTYS6JCQwMVPp2AHQBI0CNGT9+vCiPiYmJofr16yt9OwCahgDUmLS0NNEvsG7durR//35MhQGeAqbAGuPk5ETr1q0TzwG5PhAASg8jQI0aM2YMbd68WbTSd3Nze+zP09Ie0IULyZSZmUP29jbk4VGJnJzsFLlXALVCAGpUamoqNW3aVDwHDA8PF1Ph2NjbtGZNNIWGxlN8fArl5v7v862siNzdK1KvXu40enQL8vJyVvL2AVQBAahhHHzdunWjefNW0cGD1Sgs7CLZ2lpRdna+5CvA9OfdutWloKBu5OZWyaL3DKAmCECN69DhHYqIqEo2NnaUk/Pk4CssCG1tbSggoDONGNFc1nsEUCssgmjYggVHKSLCleOsROHHeBSYkZFNI0fuE9cBMCKMADUqODhGhJd01+tBw4fjOE4wFgSgBiUkJJOXV4gYwUmlbFlbio0dimeCYCiYAmvQqFFhlJ2dY/Zzxo71poSEkXT//iQ6enQgtWrFU+Un4+vxdQGMBAGoMVzqwqu95lZ633ijES1b1pHmzo2kli03U3T0Tdq793WqVs3hiV/D1+Prnj2bKNOdA6gPAlBjuM6PV3DNmTz5OVq79hSFhJwWgTZ6dBilp2fRW281Nft1fN3Vq6MkvmMA9UIAagwXOZsb/ZUpY00+PtUpPPxi3u9xQXR4+CV6/vmaZq/N1929O0HS+wVQMwSghqSmPhA7PMxxdi5HtrbWdOPGvX/8Pv/a1dWxyNeIi0sW2+gAjAABqCEcTvm3t8mBr897iAGMAAGoIdzYoCi3b9+n7OyHVL36P0d7/Ovr1+9J9joAeoAA1BDu6lKUrKyH9NtvN6hLl2f+0QiBfx0ZeVWy1wHQA1ulbwCKj1tacZgVNQ1etuxX2rjRj3799QYdP36NJk3yIUfHMrRhw+kiX4Ovz68DYAQIQA3hfn7c0iouzvxCyFdf/SFq/j744AVydXWgqKhb1LPndrp5M73I16hfH30DwTiwFU5jJkz4UdTqmSuFKS2uAxwzxps+/riL5NcGUCM8A9QYbmYqR/gxvi4HIIBRIAA1hjs5czPTonaDlNxDIjpHixdPoUuXLkl8bQB1QgBqEHdy5mamUipbtgzNnducdu/eTQ0bNqR33nmHEhOxLxj0DQGoQdzGnjs5SykwsCu99954iouLoxkzZlBQUJA4b+S///0vpacXvXgCoEUIQI3iNvbz5/tKcq0FC3zzmqHysZvvvfeeCMJBgwbR7NmzqUGDBhQcHEzZ2dL1HwRQA6wC66AztL//ftHPrySLI6YzQQIDu5jtBM1BOGvWLNq6dSs1btyYFi1aRL179yYrLhgE0DiMAHUwEuROzp06Pdr5YV3Ed9S0eMKfz19XVBt8ngZ/8cUX9Ouvv1Lt2rWpT58+5OvrS4cOHZLuLwGgEASgTp4J7tvXl86cGUrPPfeArK2TxI6OwnZ4cJlLbOww8fklORLTx8eHwsLCaN++fXT//n1q3769GAmeOXNG+r8QgIVgCqwzL730EuXk5NC2bTtEVxdubMB7ezn8eCeJFB4+fEhffvklzZw5ky5evEhDhw6lOXPmUJ06dSS5PoClYASoI7m5ufTLL79Qq1atRNh5e7tQmzY1xI9ShR+ztram/v370++//04rVqygnTt3itKZd999l+7cuSPZ6wDIDQGoI5cvX6abN2/Sc889Z5HXs7OzI39/f7FQMm3aNFq1ahW5u7vTkiVLxDQZQO0QgDrCCxXMUgFoUqFCBZo7dy5duHCBBgwYIOoIeUS4YcMGMR0HUCsEoM4CsGbNmuJDCa6urmIUGBsbS+3ataO33nqLWrRoQd9//72YngOoDQJQR/j5n6VHf4XhwmleJDl+/Di5uLjQK6+8Qh06dKAjR44ofWsA/4AA1AkeYfEIUA0BaMKLMT/++CPt2bOHUlNT6YUXXhB1hGfPnlX61gAEBKBOJCQkiBVYNQUg4x0jPXr0oBMnTtCWLVsoKiqKmjZtSiNHjqQrV64ofXtgcAhAHU1/mdoCMH/pzMCBA0XpzEcffUTffvsteXh40H/+8x9KTsYpdKAMBKBO8PS3bt26VK1aNVIze3t7mjRpkiidmTJlCq1cuVKUznAoZmRkKH17YDAIQJ1Q2/O/olSsWJHmz58vgrBfv36iiLpRo0a0adMmlM6AxSAAdYC3pv32229i0UFratSoQatXrxZ7ivn+hwwZQs8++yyFhoaidAZkhwDUgXPnzolVVi2NAAvi0d/27dspMjKSKleuTC+++CJ16tSJjh07pvStgY4hAHW0A4Q7tmhd27Zt6eeff6Zdu3ZRUlKS+PXrr79Of/zxh9K3BjqEANTJCjAXH1eqpI8Dzbl0plevXnTy5EnauHGj+Ps1adKERo8eTdeuXVP69kBHEIA6oLUFkOKysbGhwYMHi9Hfhx9+SNu2bROlM9yhOiXF/OHwAMWBANQ4PqeDR0p6DECTsmXL0uTJk8WK8cSJE2nZsmWiUzW34srMzFT69kDDEIAax40HuPWUFleAS4qn+AsXLqTz58/Ta6+9JuoI+ZwS3mHCK+EAJYUA1MH0l5+ZcemIUdSqVYs+/fRTOn36NHl7e4vT61q2bCn2HKPrDJQEAlAHAejp6SmOszQa/nvzlrrDhw9T+fLlyc/Pj7p06ZK3LRCgKAhAjVNLCywlce/BgwcPitb8N27coNatW9Mbb7whpsoA5iAANYwXAKKjow3x/K8o/Bjg5ZdfppiYGFq/fr0oqPby8qJx48bR9evXlb49UCkEoIbxM7CsrCzDjwALls4MGzZM7I7hBZPPP/9clM68//77dPfuXcW+V6BOCECNT39tbW1F23n4p3LlytHUqVMpPj5ejAIXL14sgjAgIIAePHiAtwsEBKDGF0C4uSj/zw6F433FHH78PJCnyNyKixdPvvjiC5TOAAJQy/S6A0QOfGj7unXrxDNC/keDT6/j9y4sLEzpWwMFYQSoUVz8zM8AEYAlw3uKd+zYQREREWLk3L17d+rWrZtoJwbGgwDUKD5bg8/cxQpw6fj6+tKhQ4fou+++EwfK8z8k/fv3F9vtwDgQgBqe/trZ2YnpHJS+dKZ379506tQpCg4OFrWEvLXO39+fbt68ibfVABCAGg5AXv3lEISnwyvpw4cPFwsl8+bNo82bN4tmC3PnzhWNZkG/EIAaLoHB9FdaDg4ONH36dDENHjVqlKgj5NKZTz75RNRbgv4gADWIRyV8vCQWQORRtWpVWrp0qSim5v3F48ePF7tKvvrqK5TO6AwCUIO4/x93PUEAyouPGQ0JCRHbDfnMEj69rk2bNrR//36ZXxksBQGo0ekvl3BwQS/Ir1mzZvTDDz+Is0p4qx13nOnZs6dYiQdtQwBqdAGE+9/xw3uwnH/961+iycLXX39NCQkJogfjm2++KX4O2oQA1CDsAFG2dIa7UfM5xkFBQWI6zNNj3mJ369YtBe8MSgMBqDF37tyhCxcu4Pmfwnj0/fbbb4vSmTlz5tCGDRtE6cz8+fPp3r17St8eFBMCUGNMW7ZQAqMOjo6ONGPGDFE6M2LECFFHyKUza9asQemMBiAANTj95fbvfA4wqIezs7M4rY6P8OS9xWPHjhX7jrdv345zSlQMAajBFWAfHx+ytsa3To3q1atHmzZtEqVKPBLs27cvtW3bVqwgg/rg/yINjgAx/VU/3qYYGhoqFkm4ZrNTp07Uq1cv0Y4L1AMBqCG8Qf/SpUtYANEQDr5jx46JXSS8YMLHeA4ePJguXryo9K0BAlB7oz+GHSDaK53hqTAfYr9q1Srat28fNWzYUBzsnpiYqPTtGRpGgBoLwCpVqpCbm5vStwKlUKZMGRozZowoY5o1a5Y43N3d3Z0WLVpE6enpeE8VgADUYAE0jyhAu/gQ+9mzZ4vSmaFDh4oT63jBZO3atZSdna307RkKAlBDsANEX1xcXGjlypWisw8/K+TCam5w++2336J0xkIQgBpx5coVunbtGp7/6RBPgz/77DM6ceKE6EDDW+3atWsnzi0BeSEANbYAghIY/eLmCnv37hUn1fHZxR06dBBHefLhVyAPBKCGArB69epUq1YtpW8FZNa1a1dR8L5161axcty8eXMaNmyYKIECaSEANYL/h8ACiHHwTh9uwHr27FkKCAigXbt2idKZadOmUVJSktK3pxsIQA3gnQTYAWJMfOjVuHHjxIoxn1fC55Nw15nFixeLs6Hh6SAANYB3DXDBLAqgjYsbYHDbLQ7CgQMHijpCboixbt06lM48BQSgRqa/DAEI/Bw4MDBQTI35cHduwcX7jnfu3InSmVJAAGoAT3/r1Kkj/uMHYFw4zYsk/I+jq6urOOC9ffv2dPjwYbxBJYAA1AAUQMOT8KwgPDxclM9wJ2oeFb766qti9RiKhgBUuYcPHyIAwSzeGtm9e3fRLZwLqvkYTz7JjqfHly9fxrtnBgJQ5Xjj/N27d1EADcUqnRkwYIDYWrd8+XLasWOHWCjh1WM+SwYehwDUyA4Q7gINUBz29vY0YcIEsWI8depUUUfIpTNLly6ljIwMvIn5IABVjh9y815RboMFUBIVKlSgDz74QAThv//9bzES5GLqkJAQysnJwZuJAFQ/FEDD0+JVYi6g5oURPp+Et9Vx6cwPP/xg+NIZjABVjP+V5g4hqP8DKfDoj1vzc4v+atWqiUYLHTt2pKNHjxr2DUYAqhgXu3KnYAQgSKl169bisKbQ0FCxOPL888+LFly8eGI0CECVT3+5xKFly5ZK3wroDP935efnJ47v5GM8uYSGm7FyU9arV6+SUSAAVR6AjRo1Eg+zAeRgY2NDgwYNEge6L1myhL7++muxy2TmzJmUkpIi2eukpT2gqKibdOzYNfEj/1oNrHK51QioUps2bcRzm82bNyt9K2AQKSkp9OGHH4o6wnLlyommC2PHjhWlNSUVG3ub1qyJptDQeIqPT6H8ScPH2ri7V6Revdxp9OgW5OXlTEpAAKoUdwTmkR+3PZo4caLStwMGc/XqVZo7d67oNlO7dm2aN2+eKLLmEWNREhKSadSoMAoLu0i2tlaUnf3kMZbpz7t1q0tBQd3Iza0SWRKmwCp15swZyszMxA4QUETNmjUpKChItOPnInw+zJ2fRe/evdts6UxwcAx5eYXQTz896l5tLvzy/zl/Pn8df70lIQBV/PyPtzZ5e3srfStgYI0bNxbPBSMjI6liRZ6y9qLOnTvT8ePHH/vcBQuO0siR+ygjI7vI4CuIP5+/jr+er2MpCEAV7wBp0qQJOTg4KH0rAMQF1AcOHBDF07dv3xbPp/v27Uvnzp0T7w6P3GbNOiTJO8XXWbfulEXedTwDVCmebvApYfwMBkBtBfpbtmwRh7vzs8J+/cbQN9+4U0aGdNvrypa1pdjYobI/E8QIUIV4w/qpU6dQAA2qZGNjQ0OGDBGjP16k++qrHMrIeHJZS/v2tWnnzj505cpoys19h3r39ijyNbKzc8RCitwQgCrE/dyys7MRgKBqZcuWJT+/IZSd7c6x+MTPc3QsQ9HRN2ncuPASPRPkVeSzZxNJTrayXh1KvQBSpkwZcR4sgJqtWRNdZKnLnj0J4qOk+LqrV0fRxx93IblgBKjSAOTwK03xKYAlhYbGl3jFt7j4urt3lzw4SwIBqOJD0AHULDX1gdjhIae4uGRZt80hAFUmLS1NdIFBAILaxcUl/2N7mxz4+hcuJMt2fQSgykRFRYmDkFq1aqX0rQCYlZmZo/nXwSKICqe/vLrm5eWl9K0APFb/x4d0cYkWf0RExBGR/DuV7O2L3n9cWghAFS6A8PY3XgUGUEJubi5du3YtL+j4g/cEc0t906FKLi4u5OnJ4cdzYCuz1+MyGA+P/xU0u7lVpBYtqlFSUgb99Veq2a/lrjH5v1ZqCEAVBmCPHj2Uvg0wiLt374pwM4WcKfCSkpLEn/NWTG6UyruSuCEC/5zPHOYAZB4eaykuzvxCyHPPudLPP/fL+/Xy5Z3EjyEhp2nYsD1mv7Z+/Urk5GRHckEAqkhycrKorudmlABSt1fjpqf5R3SnTp2iixcv5u3u4N6THG5du3bNCzo3NzfRlONJuJ8f1+qZK4U5cOAvsrJaWqo6QD8/txJ/XYleQ9arQ4nwAUgMK8DwNNNXDrWCQcfnffDuIsb9/Tjc+vXrlxd03PWFnz2XFDczDQg4Kcs3jEN1zBh5nzEiAFU2/XVychJt8AGKkpiY+FjQ8Y+pqY+eq3H7Kg639u3b05gxY8TPOfAqV64s2Zvr5eUsmplyPz8pC6J59Nep0zPk6VmV5IRuMCrC7YVu3rwp2g4BmNy/f18sQBR8TscLFczOzo48PT3zAo5/5A8e6fHhR3JLSEgWzUy5n5/WusFgBKiyESAfTwjGLTOJi4t7bFTHpSdcG8rc3d1FuL311lt5QdegQQNFqwbc3CpRQEBn0cxUKoGBXSzSHh8BqBLcZPLPP/9EAbRBntNdv379saDjUR6P9hgfXM7h1rNnz7yg4wa5/IhEjUaMaE43bqRL0hR1wQJfGj68GVkCAlBFoz+GBRB94edxhZWZ8PM7U5kJBxs3vxg4cGBe2FWvXp20ZubMtlS9ugP5++8X/fxK8kyQn/nZ2tqIkZ+lwo/hGaBKzJ8/n5YuXUp37tyxyHMbkFZWVlZemUn+oONRPeNSEi4zyf+Mjj94SmuuzESLEjR0KhwCUCVeffVV0QghPLz4TSNBmenrpUuXCi0z4RBktWrVeizoeJGiNGUmWhb797nA3NKqYOME/jeei5y5zo9LXeRe7X0SBKBK8IrdoEGDaNGiRUrfCvyNd0MUVmbCuycYn9tcMOj411WqVMF7WAC3tOKuLtzYgPf28vY2OXd4FBeeAaoAlzNcuXIFz/8UwvtbCysz4QN/GK+wcqEwB9zLL7+cF3Z16tTB44pi4rDz9n60fU5NEIAqgAUQy5WZxMfHPxZ058+fzysz4a1fPIobOnRoXtDxszs0p9AnBKBKApDLHp555hmlb0U3z+lu3Ljx2PT1zJkzeWUmVatWFeHWvXt3mjJlSl6ZSfny5ZW+fbAgPANUgV69eokfQ0NDlb4VzeGFo8LKTLiukvHCAwdb/ud0pjITrLYDRoAqGK3wCHD06NFK34qq8Qord8opGHQJCY8OzeFSEg8PDxFu48eP/0eZCXc6ASgMAlBhf/31F926dQs7QPL9g8DvScGg4zITbunEatSoIcKNtw3mLzMpV66ckt9K0CAEoMIlARERvHXIjnx8fMhouOi7YNDxz1NSHjXY5OdxvCDRtm1bGjlyZF6ZCT+/A5ACngFauCiUz1HlowT/eZpWrigK5eaS3F+NWwzprcyET7orGHZc+sNsbW3zykzy19PVrVsXz+lAVghAmWlpW9DT4lKSJ5WZcAkK41ArGHTc/5BbOgFYGgJQRsHBMU+1MZxbDHGXDTUylZnkDzouM0lPTxd/zrshCgYdf/DuCQC1QADKZMGCo5K0Bpo/31d02VCyzISDLX/Q8Qcv3DDTEZ4Fw44XKlBmAmqHAJRp5Cdlc8jg4B6ytwji8yIKKzPhKS3jMDOVmeTvPMy/hzIT0CoEoMHag3OZyeXLlx8LOl6kMJWZuLq6PhZ0PMrj3nUAeoIAlFj37tueeEDM9Omt6bXXGlLjxlXo/v1sOnLkCr377kE6d+5OsQ6I2bevb4mP2SyszIR/n3F3YVPA5e9q4uysr1VogCdBAEpc6tKkScgT/3z37v+jrVt/p19+uU62tta0cGF7atrUmby8NlB6elYxrj+s0L5pmZmZolA4/zM6/uCRnqnMhFdaC47qeEVWb804AUoCASihCRN+LPKQ6PycncvRrVvjqEOHrRQR8SiszI0CuUZw0iS3xxYk+NmdqcyEGyoUDDoOP3t7e0n+jgB6ggCUkIfHWoqLe7SLoTi4+PnChRHUtGkInTnzaPO+OVZWiZSb+1/xcz7bteDUlX/OZ8ECQPEgACWSmvqAKlb8uMAODzNvvBXRzp19qFIle2rffmsxXyWXvvnGi1q39qaaNWuizATgKWEvsEQKnnlQlFWruornf76+X5TgVazIza0V1aqlvs66AFqEAJQINzYoroCALvTSS+7UocOXdOVKmmyvAwDmIQAlwge9FDf8+vTxoI4dv6Q//0yR7XUAoGgIQInwKVf8XM/cNJinvQMGNKbevb8Tzwz5EGmWkvKgWIXTfH1+HQCQBhZBLLgKnJv7TqG/P3Tobtq48Uwxrl+Jzp8f8VT3CAD/gxGghLifn7k6QCurpaW+NtcB8iHSACAdbAOQEBcql6TtVUnwdceM8Zbl2gBGhQCUEHdy5mamPFqTEl+Pr1vYNjgAKD08AzRYNxgA+B+MACXGIcWdnKUUGNgF4QcgAwSgDLiNPXdylsKCBb6yN0MFMCpMgVV8JgiP/BB+APJBAMrMSKfCAWgNAtDC5wLv3p3wWOME3uHBrbG4zo9LXbDaC2AZCEAFpKU9oAsXkkVjA97byzs8nJxwLi6ApSEAAcCwsAoMAIaFAAQAw0IAAoBhIQABwLAQgABgWAhAADAsBCAAGBYCEAAMCwEIAIaFAAQAw0IAAoBhIQABwLAQgABgWAhAADAsBCAAGBYCEAAMCwEIAIaFAAQAw0IAAoBhIQABwLAQgABARvX/nxQ5aI4A+9MAAAAASUVORK5CYII=", + "image/png": "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o9W/sse3SpUqlrbH1DADZAAksqHLly+rCY9Dhw5h27ZtqFmzptVNAjNAIvI6KWQqS12++uordZpb/fr1tbjrJjNAIvJ2lhUXF6fG++QcD1nyoguDY4BE5M0Ma+jQoWqN37Jly9SyF52YzACJyFteeukl/Pvf/8bcuXNVF1g3hoYZoF5TMkTklqlTp2LcuHGYOHEiBg4cqOVdNDXMAPVqDRG5TIqZPv300xg5ciSee+45be+gwQyQiDxp1apViI+PVyXtpbiprkzTVP8yAyQij9iyZQt69uypxvtk7E+38bVrBUDd2sguMJEf+vLLL9URli1atMBbb72ltrrpzGQGSESesHfvXrRp0wYNGzbEypUrUapUKe1vrGEY6l92gYnIbQcPHlSVXapVq6YqO4eGhvrF3TT+FwDZBSYitxw/flxVdilbtiw+/PBDRERE+M2dNDXtArMYApEfOHfunMr8srKyVGWXihUrwp8YmmaADIBEmsvMzETbtm1VBihnelSvXh3+xmQGSESukoyvc+fOauJj69atqFOnjl/eRIMZIBG5Ii8vD7169VJZn5Syb9y4sd/eQJMZIBG5EjAGDRqkDjCSpS4PP/ywX988gxkgERU3+Mme3vnz52PRokXo0KGD3984U9MMUK/WEBFeffVVTJ48GdOnT8cTTzxhiztiaJoBMgASaWTOnDkYNWoUxowZg2HDhsEuTGaARFSYpUuXIjExUQU+KW5qJwYzQCIqyIYNG9CnTx/07t0br7/+unZdxZJiBkhE1/Tpp5/i8ccfR0xMjJr40G2iwBOYARLRX3zzzTdo164d7rvvPnWQUXBwsC3vkskxQCK62g8//KBObrvjjjuQkpKCkJAQ294gg+WwiCjfTz/9pCq7lC9fXu3yuP766219cwxOghCROH36tKrsIhMdcoC5BEG7MzXtArMaDJEP/fLLL6qas5S3krJWt956qyPuv6FpBsgASOQjly9fRvv27ZGWloZPPvkEt99+u2PuvckMkMi5cnJy0L17d+zcuRObN29W53k4icEMkMiZ5Je/f//++OCDD7B27Vo0bdoUTmMyAySCI3/xhw8fjiVLluDdd99FdHQ0nMhgBkjkPFLUICkpSRU5kC6wU5maZoB6tYbIRqZNm4axY8filVdeUcVNnczQNANkACTyAilkOmLECFXYdOTIkY6/xyYzQCJn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", "text/plain": [ "
" ] @@ -57,10 +107,25 @@ ")" ] }, + { + "cell_type": "markdown", + "id": "6", + "metadata": {}, + "source": [ + "## Step 2 — Decide how many qubits are needed for the position register\n", + "\n", + "If the graph has `N` nodes, we need enough qubits to encode node indices in binary.\n", + "\n", + "- `N = len(G.nodes())`\n", + "- `num_qubits = ceil(log2(N))`\n", + "\n", + "That means the quantum register `x` can represent `2**num_qubits` = `N`.\n" + ] + }, { "cell_type": "code", "execution_count": 3, - "id": "3", + "id": "7", "metadata": {}, "outputs": [ { @@ -77,10 +142,29 @@ "print(\"number of nodes=\", N, \"number of required qubits=\", num_qubits)" ] }, + { + "cell_type": "markdown", + "id": "8", + "metadata": {}, + "source": [ + "## Step 3 — Build “neighbor-aware” probability vectors\n", + "\n", + "A quantum walk on a graph needs a way to represent “where can I go next from node $i$?”.\n", + "\n", + "We create helper functions:\n", + "- `get_edges_of_node(G, i)`: returns the neighbors of node `i`.\n", + "- `inner_degree(G, num_qubits, i)`: builds a length `2**num_qubits` vector where:\n", + " - entries corresponding to neighbors of `i` are `1`,\n", + " - all others are `0`,\n", + " - then we normalize by the node degree `k` to get a **uniform distribution over neighbors**.\n", + "\n", + "This vector is used to prepare the `y` register so it represents “allowed moves” from the current node.\n" + ] + }, { "cell_type": "code", "execution_count": 4, - "id": "4", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -102,10 +186,54 @@ " return l_array / k" ] }, + { + "cell_type": "markdown", + "id": "10", + "metadata": {}, + "source": [ + "## Step 4 — Define the quantum walk (state prep, coin, shift, and repeated steps)\n", + "\n", + "This cell defines the core quantum logic using Classiq `@qfunc`.\n", + "\n", + "### Registers\n", + "- `x`: **position register** (which node the walker is on)\n", + "- `y`: **coin / neighbor register** (encodes the neighbor-choice space)\n", + "\n", + "### 4.1 Initial state: `prepare_initial_state(x, y)`\n", + "Goal: start with a clean, interpretable state.\n", + "\n", + "1. Prepare `x` in a **uniform superposition over valid nodes**:\n", + " - If `N` is exactly `2**num_qubits`, a Hadamard transform gives uniform superposition automatically.\n", + " - Otherwise, we prepare a custom probability vector that gives equal weight to nodes `0..N-1` and zero to invalid states.\n", + "\n", + "2. Prepare `y` **conditioned on the current node in `x`**:\n", + " For each node `i`, if `x == i`, we prepare `y` using the neighbor distribution vector from `inner_degree(...)`.\n", + "\n", + "So after this, the state is conceptually:\n", + "- “uniform over nodes” in `x`,\n", + "- and for each node, `y` contains amplitudes only on its neighbors.\n", + "\n", + "### 4.2 Coin operator: `my_coin(x, y)`\n", + "A discrete-time quantum walk needs a “coin flip” to mix amplitudes.\n", + "\n", + "Here, the coin depends on the current node:\n", + "- If `x == i`, apply a **Grover diffuser** on register `y` corresponding to neighbors of node `i`.\n", + "This mixes the neighbor amplitudes in a structured way.\n", + "\n", + "### 4.3 Shift operator: `my_shift(x, y)`\n", + "This updates the position based on the coin information.\n", + "\n", + "### 4.4 Repeating steps: `discrete_quantum_walk(time, coin, shift, x, y)`\n", + "We apply the pair `(coin, shift)` repeatedly `time` times using `power(time, ...)`.\n", + "\n", + "That is exactly the discrete-time walk loop:\n", + "**(coin → shift) × t**\n" + ] + }, { "cell_type": "code", "execution_count": 5, - "id": "5", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -162,17 +290,42 @@ " )" ] }, + { + "cell_type": "markdown", + "id": "12", + "metadata": {}, + "source": [ + "## Step 5 — Choose number of steps, build `main`, and synthesize the circuit\n", + "\n", + "### Number of steps\n", + "`t` controls how far the quantum walk evolves. More steps usually means:\n", + "- wider spreading over the graph,\n", + "- more interference patterns,\n", + "- sometimes more “structure” in the final distribution (depending on the graph).\n", + "\n", + "### The `main` quantum program\n", + "`main(x: Output[QNum[num_qubits]])`:\n", + "1. Allocates `x` (position) and `y` (coin).\n", + "2. Prepares the initial state.\n", + "3. Applies the discrete-time quantum walk for `t` steps.\n", + "4. Drops `y` (we only care about measuring the position distribution in `x`).\n", + "\n", + "Finally:\n", + "- `synthesize(main)` compiles the high-level program into an executable quantum program.\n", + "- `show(qprog)` displays the synthesized result.\n" + ] + }, { "cell_type": "code", "execution_count": 6, - "id": "6", + "id": "13", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Quantum program link: https://platform.classiq.io/circuit/36psaY4uUAB0FUaKitHGFwf28f5\n" + "Quantum program link: https://platform.classiq.io/circuit/36q7qOkGDqbMNrOQoLoVHvTZRAo\n" ] } ], @@ -196,10 +349,24 @@ "show(qprog)" ] }, + { + "cell_type": "markdown", + "id": "14", + "metadata": {}, + "source": [ + "## Step 6 — Execute and collect results\n", + "\n", + "Here we run the synthesized program and fetch the results.\n", + "\n", + "The key output we care about is the measured distribution of the **position register `x`**:\n", + "- each possible node index `x` has a probability,\n", + "- these probabilities should sum to ~1 (up to sampling / execution effects).\n" + ] + }, { "cell_type": "code", "execution_count": 7, - "id": "7", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -207,10 +374,26 @@ "result = execution_job.result_value()" ] }, + { + "cell_type": "markdown", + "id": "16", + "metadata": {}, + "source": [ + "## Step 7 — Visualize the probability distribution over nodes\n", + "\n", + "We plot a bar chart:\n", + "- **x-axis**: node index (the measured value of the position register `x`)\n", + "- **y-axis**: probability of measuring that node\n", + "\n", + "Tip for interpretation:\n", + "- Compare “high-probability nodes” to the graph drawing.\n", + "- Try changing the graph model or `t` and see how the distribution changes.\n" + ] + }, { "cell_type": "code", "execution_count": 8, - "id": "8", + "id": "17", "metadata": {}, "outputs": [ { @@ -225,7 +408,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGrCAYAAADjKswUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJFBJREFUeJzt3QuQltV9P/AfYLiJoAblYkhQUZHIRUEIVmMnEtGxrbQxAZoGJBYbDR0tEQ2pAkYtqEjQijDVIYrxQkwbp5NSEkWxTUVR0BhvjSZSUORmB1CIYIH/nNP/u93VBVkQ9rD7+cw8wz7Pe97zPu++q/vdc22yY8eOHQEAULCm9X0DAAAfR2ABAIonsAAAxRNYAIDiCSwAQPEEFgCgeAILAFC8g6IB2L59e6xcuTIOOeSQaNKkSX3fDgCwG9JScO+++2507tw5mjZt2vADSworXbp0qe/bAAD2wIoVK+Izn/lMww8sqWWl8obbtm1b37cDAOyGjRs35gaHyu/xBh9YKt1AKawILABwYNmd4RwG3QIAxRNYAIDiCSwAQPEaxBgWAA5M27Ztiw8++KC+b4N96FOf+lQ0a9Zsr+sRWACol/U3Vq1aFevXr/fdbwQOPfTQ6Nix416tlSawALDfVcLKkUceGa1bt7boZwMOpps3b441a9bk806dOu1xXQILAPu9G6gSVj796U/77jdwrVq1yv+m0JI+8z3tHjLoFoD9qjJmJbWs0Di0/v+f9d6MVxJYAKgX9n5rPJp8Avv8CSwAQPEEFgCoZ127do3p06fvVR133313no2zK5MmTYo+ffpUnV944YUxZMiQqvM//MM/jMsvvzxKZNAtAEXo+t1/2a+vt2zKedHYXHHFFfHXf/3XO338n/7pn/K6KdWDVAowJYQYgQUA9pGtW7dG8+bNi/n+tmnTJh87c/jhh0epdAkBwG5KXSZjxozJR7t27aJ9+/ZxzTXX5PVGKi0S1113XYwYMSLatm0bF198cb7+j//4j/H5z38+WrRokcvccsstH6n73XffjeHDh8fBBx8cRx11VMyYMaPG49OmTYuePXvmx7t06RKXXnppvPfeex+p5+GHH47jjjsuWrZsGYMHD44VK1bstEuotvdXaU1JX//Xf/1X/M3f/E0eNJuOTZs25ff1k5/85COvme4rvYd9RWABgDq455574qCDDorFixfHrbfemoPEXXfdVfX41KlTo3fv3vHcc8/lMLNkyZL42te+FsOGDYtf//rXOTSk62nMSXU333xz1fO++93vxmWXXRaPPPLI//3Cbto0brvttnjppZfyPTz22GNx5ZVX1qgjLdJ2ww03xJw5c+I//uM/8no36XX3ROoe+sxnPhPf//734+23385HCiWpvh/+8Ic1yqbzCy64IA455JDYV3QJHYD9rqVojP2/AKl14wc/+EFucTjhhBNyCEnno0ePzt+cL33pS/Gd73yn6hv19a9/Pc4666wcUpLjjz8+Xn755RxQ0qDXij/4gz/IQaVSJgWOVO+Xv/zlfK36OJLUSnP99dfHt771rbjjjjuqrqd1Tm6//fYYMGBAPk/B5sQTT8zhqn///nX68FL3UFrkLYWQtKx+xV/+5V/GaaedlgNMWrk2LQg3b968ePTRR/fpD4cWFgCogy984Qs11hUZOHBgvPbaa3kF36Rfv341yr/yyis5jFSXzqs/p1JPdek8Pbfi0UcfzcEndRelEPGNb3wj3nnnndyqUpFafk499dSq8+7du+eZQ9Xr2Vsp+KTurRSGkh/96Efxuc99Lr74xS/GviSwAMAnKHWbfNKWLVsWf/RHfxS9evXK42FSN1NljEsa2Lu/pVaWSpdW6g4aNWrUPl8IUGABgDp4+umna5w/9dRTeZDrzvbISV0yqXununSeun2qPyfV8+F603OTJUuWxPbt2/Ng3dTCk567cuXKj7zW//zP/8Szzz5bdf6f//mfeRxLpZ66SjOcqrcCVfzFX/xFHpCbxtSk7q2RI0fGviawAEAdLF++PMaOHZvDwAMPPBB///d/nwfI7kwaz7JgwYI8e+g3v/lN7kpJ40zSmigfDjE33XRTLpNaTx566KGqert165bHp6TX+t3vfhf33ntvzJo16yOvldZQSeuspFCVQk4aI5MCTl3Hr1QfK/Nv//Zv8dZbb8W6deuqrh922GHxZ3/2ZzFu3Lg4++yz8+DcfU1gAYA6SFOWf//73+cQ8O1vfzuHisr05dqccsop8eMf/zgefPDBOOmkk2LChAl55k31AbeVYJNaR04++eQ8oDbNPkrTkpPevXvn8xtvvDHXcd9998XkyZNr3WTwqquuij//8z/P42TSmitz587d48833Wfqjjr22GPjiCOOqPHYRRddlLujvvnNb8b+0GRHZfL4AWzjxo15PvyGDRvy/PD9zSwhgN33/vvvxxtvvBFHH310XivkQJLWJknrmOztMvoNwb333pvXaEldUx+3ON7OPvO6/P42rRkA2G1pVlKa0jxlypT4q7/6q/22kq8uIQBgt6VxNmm6dFqbZfz48bG/aGEBgN20cOHCRv+9mjRpUj72Ny0sAEDxBBYAoGEGljQ/PM3NTiN9034FaY+CXW2elJYpTksDp9X/0ujqNLK4ujRRKU3zSnsStGrVKgYNGpSXLAag4UoLodE4bP8EPus6j2FJ87nTgjlpwZoUVtLUrjRPPC2gc+SRR9a6edLf/u3f5gE6aSTxz372s7yEbypbmV+eBvCk1fLSYjppylPaICo9llbPO9CmvAGwa+l3Qdp5OE2HTWt7pPN9vaw79SM1SKS1WtauXZs/872ZUVTndVhSSEkbK6VV+iqpKe1cmVbWq+wy+XHSIjrnnXdeXvUvvXznzp3zgjmVVf/SfOwOHTrkfQp2Z1ts67DUD7s1A3sq/RJLU2Orb9xHw9W6devci/LhwLLP1mFJP2Bpqd/q05hSYkpdOIsWLfrY56dw8thjj+XWmLRaX5IWklm1alWuoyLdfApGqc7aAsuWLVvyUf0NA3DgSL+4PvvZz+a9b2rbq4aGo1mzZnkX6b1tRatTYEn7CKQfrNT6UV06f/XVV3f6vJSc0nbYKWSkG7/jjjviy1/+cn4shZVKHR+us/LYh6XliK+99tq63DoAhUm/wNLeN+mAImYJHXLIIfH888/HM888EzfccEMeA7M3c9lTC08KQZVjxYoVn+j9AgBlqVMLS/v27XMLyerVq2tcT+dpxbudSd1GaafJJM0SeuWVV3IrSdqTofK8VEfq36peZypbmxYtWuQDAGgcmta1z7Fv3755m+yKNOg2nQ8cOHC360nPqYxBSbOCUmipXmcak5K2xq5LnQBAw1Xnac2pO2fkyJF5bZW0tXaa1rxp06Y8Vbmy7XYar1LZ9jr9m8qmralTSJk3b15eh2XmzJlVfZiXX3553kr7uOOOq5rWnGYODRky5JN+vwBAYwgsQ4cOzfOp00JvaVBs6raZP39+1aDZ5cuX5y6gihRmLr300njzzTfzonBpPZYf/ehHuZ6KK6+8Mpe7+OKLY/369XH66afnOq3BAgDs0TosJbIOS/1orOuwdP3uv0Rj1Fg/b6CM39/2EgIAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFO6i+bwCgZF2/+y/RGC2bcl593wLUoIUFACiewAIANMzAMmPGjOjatWu0bNkyBgwYEIsXL95p2TvvvDPOOOOMOOyww/IxaNCgj5S/8MILo0mTJjWOc845Z09uDQBogOocWObOnRtjx46NiRMnxtKlS6N3794xePDgWLNmTa3lFy5cGMOHD4/HH388Fi1aFF26dImzzz473nrrrRrlUkB5++23q44HHnhgz98VANC4A8u0adNi9OjRMWrUqOjRo0fMmjUrWrduHbNnz661/H333ReXXnpp9OnTJ7p37x533XVXbN++PRYsWFCjXIsWLaJjx45VR2qNAQCoc2DZunVrLFmyJHfrVDRt2jSfp9aT3bF58+b44IMP4vDDD/9IS8yRRx4ZJ5xwQlxyySXxzjvv7LSOLVu2xMaNG2scAEDDVafAsm7duti2bVt06NChxvV0vmrVqt2q46qrrorOnTvXCD2pO2jOnDm51eXGG2+MJ554Is4999z8WrWZPHlytGvXrupI3UwAQMO1X9dhmTJlSjz44IO5NSUN2K0YNmxY1dc9e/aMXr16xbHHHpvLnXXWWR+pZ/z48XkcTUVqYRFaAKDhqlMLS/v27aNZs2axevXqGtfTeRp3sitTp07NgeUXv/hFDiS7cswxx+TXev3112t9PI13adu2bY0DAGi46hRYmjdvHn379q0xYLYygHbgwIE7fd5NN90U1113XcyfPz/69ev3sa/z5ptv5jEsnTp1qsvtAQANVJ1nCaWumLS2yj333BOvvPJKHiC7adOmPGsoGTFiRO6yqUhjUq655po8iyit3ZLGuqTjvffey4+nf8eNGxdPPfVULFu2LIef888/P7p165anSwMA1HkMy9ChQ2Pt2rUxYcKEHDzSdOXUclIZiLt8+fI8c6hi5syZeXbRBRdcUKOetI7LpEmTchfTCy+8kAPQ+vXr84DctE5LapFJXT8AAHs06HbMmDH5qE0aKFtdajXZlVatWsXPf/5znwQAsFP2EgIAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKBhBpYZM2ZE165do2XLljFgwIBYvHjxTsveeeedccYZZ8Rhhx2Wj0GDBn2k/I4dO2LChAnRqVOnaNWqVS7z2muv7cmtAQANUJ0Dy9y5c2Ps2LExceLEWLp0afTu3TsGDx4ca9asqbX8woULY/jw4fH444/HokWLokuXLnH22WfHW2+9VVXmpptuittuuy1mzZoVTz/9dBx88MG5zvfff3/v3h0A0DgDy7Rp02L06NExatSo6NGjRw4ZrVu3jtmzZ9da/r777otLL700+vTpE927d4+77rortm/fHgsWLKhqXZk+fXpcffXVcf7550evXr1izpw5sXLlynj44Yf3/h0CAI0rsGzdujWWLFmSu2yqKmjaNJ+n1pPdsXnz5vjggw/i8MMPz+dvvPFGrFq1qkad7dq1y11NO6tzy5YtsXHjxhoHANBw1SmwrFu3LrZt2xYdOnSocT2dp9CxO6666qro3LlzVUCpPK8udU6ePDmHmsqRupkAgIZrv84SmjJlSjz44IPx05/+NA/Y3VPjx4+PDRs2VB0rVqz4RO8TACjLQXUp3L59+2jWrFmsXr26xvV03rFjx10+d+rUqTmwPProo3mcSkXleamONEuoep1p3EttWrRokQ8AoHGoUwtL8+bNo2/fvlUDZpPKANqBAwfu9HlpFtB1110X8+fPj379+tV47Oijj86hpXqdaUxKmi20qzoBgMajTi0sSZrSPHLkyBw8+vfvn2f4bNq0Kc8aSkaMGBFHHXVUHmeS3HjjjXmNlfvvvz+v3VIZl9KmTZt8NGnSJC6//PK4/vrr47jjjssB5pprrsnjXIYMGfJJ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UDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsA0DADy4wZM6Jr167RsmXLGDBgQCxevHiX5R966KHo3r17Lt+zZ8+YN29ejccvvPDCaNKkSY3jnHPO2ZNbAwAaoDoHlrlz58bYsWNj4sSJsXTp0ujdu3cMHjw41qxZU2v5J598MoYPHx4XXXRRPPfcczFkyJB8vPjiizXKpYDy9ttvVx0PPPDAnr8rAKBxB5Zp06bF6NGjY9SoUdGjR4+YNWtWtG7dOmbPnl1r+VtvvTWHkXHjxsWJJ54Y1113XZxyyilx++231yjXokWL6NixY9Vx2GGH7fm7AgAab2DZunVrLFmyJAYNGvR/FTRtms8XLVpU63PS9erlk9Qi8+HyCxcujCOPPDJOOOGEuOSSS+Kdd97Z6X1s2bIlNm7cWOMAABquOgWWdevWxbZt26JDhw41rqfzVatW1fqcdP3jyqcWmDlz5sSCBQvixhtvjCeeeCLOPffc/Fq1mTx5crRr167q6NKlS13eBgBwgDkoCjBs2LCqr9Og3F69esWxxx6bW13OOuusj5QfP358HkdTkVpYhBYAaLjq1MLSvn37aNasWaxevbrG9XSexp3UJl2vS/nkmGOOya/1+uuv1/p4Gu/Stm3bGgcA0HDVKbA0b948+vbtm7tuKrZv357PBw4cWOtz0vXq5ZNHHnlkp+WTN998M49h6dSpU11uDwBooOo8Syh1xdx5551xzz33xCuvvJIHyG7atCnPGkpGjBiRu2wqLrvsspg/f37ccsst8eqrr8akSZPi2WefjTFjxuTH33vvvTyD6Kmnnoply5blcHP++edHt27d8uBcAIA6j2EZOnRorF27NiZMmJAHzvbp0ycHksrA2uXLl+eZQxWnnXZa3H///XH11VfH9773vTjuuOPi4YcfjpNOOik/nrqYXnjhhRyA1q9fH507d46zzz47T39OXT8AAHs06Da1jlRaSD4sDZT9sK9+9av5qE2rVq3i5z//uU8CANgpewkBAMUTWACA4gks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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGrCAYAAADjKswUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJDRJREFUeJzt3Q2UVdV5P/6Hl/AmETUoL4YEFRWJvCgIwWrsilR02RbbmABNgxKLjYYuLRENqQKJJqAiQSuBVV1EsSrEtHFltRSjRGxTUSJojG+NJlJQ5M0uQCGCBf5r79//TmdwBhkQZjPz+ax1FnPO3ffMufeOznf2fvY+zXbt2rUrAAAK1ryhLwAA4MMILABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAitcyGoGdO3fG6tWr4+Mf/3g0a9asoS8HANgLaSm4d955J7p27RrNmzdv/IElhZVu3bo19GUAAPtg1apV8clPfrLxB5bUs1J5wYcffnhDXw4AsBc2b96cOxwqv8cbfWCpDAOlsCKwAMChZW/KORTdAgDFE1gAgOIJLABA8RpFDQsAh6YdO3bE+++/39CXwQH0sY99LFq0aLHf5xFYAGiQ9TfWrFkTGzdu9O43AUcccUR07tx5v9ZKE1gAOOgqYeWYY46Jdu3aWfSzEQfTrVu3xrp16/J+ly5dDm5gmTlzZtx66635B65v377x93//9zFw4MBa2/7zP/9zfO9734vXXnstd/udeOKJ8Y1vfCO+8pWv1HhBkyZNirvuuiv/AP/BH/xBzJo1K7cFoPENA1XCyic+8YmGvhwOsLZt2+Z/U2hJn/m+Dg/Vu+h2/vz5MW7cuBwwli9fngPL0KFDq9LT7o466qj4u7/7u1iyZEk8//zzMXr06Lw98sgjVW1uueWWuOOOO2L27Nnx9NNPx2GHHZbP+d577+3TiwKgXJWaldSzQtPQ7v//rPenXqnZrtS9UQ+DBg2KM844I+68886q+/ikVer+5m/+Jr75zW/u1TlOP/30uPDCC+PGG2/MvSvpHgKp1+Waa67Jj2/atCk6deoU99xzT4wYMeIDz9+2bVvedl8pLz3PwnEAZUt/jL7++utx3HHHRZs2bRr6cmjAzzz9/u7QocNe/f6uVw/L9u3bY9myZTFkyJD/O0Hz5nk/9aB8mBROFi1aFP/1X/8Vn/vc5/Kx9ALS0FL1c6aLT8GornNOmTIlt6ls7iMEAI1bvQLLhg0b8thj6v2oLu2n0FGXlJzat28frVq1yj0rqeblj/7oj/JjlefV55wTJkzI56xs6R5CAHCo6t69e8yYMWO/znHPPffk2Th7Mnny5OjXr1/V/qWXXhoXXXRR1f4f/uEfxtVXXx0lOiizhNJNjZ577rl49913cw9LqoE5/vjj8xuzL1q3bp03ABqP7t/814P6/VZMvTCammuuuSaXcNQlTZRJ66ZUD1IpwJQQYuoVWDp27Jire9euXVvjeNpP86vrkoaNevTokb9Oye7ll1/OwzopsFSel85RfbpT2q+eAgHgUJNKKdLoQinat2+ft7qkiTKNYkgoven9+/fPvSQVqeg27Q8ePHivz5OeUymaTQU4KbRUP2cqwkmzhepzTgA40NIf2mPHjs1bqqFMf8jfcMMNuUaz0iORJpSMGjUqF5Fefvnl+fg//dM/xWc+85k8OpDa3HbbbR849zvvvBMjR47MM2WPPfbYvIRIddOnT4/evXvnx1Pt5pVXXplHLnb38MMP52VBUnFrmnFbvWxi9yGh2l5fpTclff3f//3f8bd/+7d5nZy0bdmyJb+uH//4xx/4num60ms4UOo9rTkN56T1Uu69997cU3LFFVfkF5CmKifpQ0o1JhWpJ+XRRx+N3/3ud7l9+pDuu++++Mu//Mv8eHoD0ptz0003xU9/+tP49a9/nc+RZg5VH1cDgBKk338tW7aMpUuXxu23356DxN133131+LRp0/KSH88++2wOM2myype+9KU86zX9jkuhIR1PNSfVpfXNKs9Ls26vuuqq/Puz+mjFHXfcES+++GK+hp///Odx7bXX1jhHWqTtu9/9bsydOzf+8z//M693U9ts272Rhoc++clPxne+851466238pZCSTrfD3/4wxpt0/7FF1+cS0CKqWEZPnx4rF+/PiZOnJiLYlNSW7hwYVXR7MqVK/ObWpHCTEqBb7zxRl48pmfPnvGP//iP+TwV6Q1P7VISTW/uWWedlc95qEx3O9jjrqVoiuO/AKl34/vf/37+g/vkk0/OISTtjxkzJr85n//85/NSHRVf/vKX49xzz80hJTnppJPipZdeygElFb1WpEVTK8uDpDYpcKTzViapXF2tjiT10qQ/9L/2ta/FD37wg6rjaZ2TtOxImmmbpGBzyimn5HBV1wKv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LABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAGmdgmTlzZnTv3j3atGkTgwYNiqVLl9bZ9q677oqzzz47jjzyyLwNGTLkA+137doVEydOjC5dukTbtm1zm1dffXVfLg0AaITqHVjmz58f48aNi0mTJsXy5cujb9++MXTo0Fi3bl2t7RcvXhwjR46Mxx9/PJYsWRLdunWL8847L958882qNrfcckvccccdMXv27Hj66afjsMMOy+d877339u/VAQBNM7BMnz49xowZE6NHj45evXrlkNGuXbuYM2dOre3vv//+uPLKK6Nfv37Rs2fPuPvuu2Pnzp2xaNGiqt6VGTNmxPXXXx/Dhg2LPn36xNy5c2P16tXx8MMP7/8rBACaVmDZvn17LFu2LA/ZVJ2gefO8n3pP9sbWrVvj/fffj6OOOirvv/7667FmzZoa5+zQoUMeaqrrnNu2bYvNmzfX2ACAxqtegWXDhg2xY8eO6NSpU43jaT+Fjr1x3XXXRdeuXasCSuV59TnnlClTcqipbGmYCQBovA7qLKGpU6fGvHnz4ic/+Uku2N1XEyZMiE2bNlVtq1at+kivEwAoS8v6NO7YsWO0aNEi1q5dW+N42u/cufMenztt2rQcWB577LFcp1JReV46R5olVP2cqe6lNq1bt84bANA01KuHpVWrVtG/f/+qgtmkUkA7ePDgOp+XZgHdeOONsXDhwhgwYECNx4477rgcWqqfM9WkpNlCezonANB01KuHJUlTmi+55JIcPAYOHJhn+GzZsiXPGkpGjRoVxx57bK4zSW6++ea8xsoDDzyQ126p1KW0b98+b82aNYurr746brrppjjxxBNzgLnhhhtynctFF130Ub9eAKApBJbhw4fH+vXrcwhJ4SMN26Sek0rR7MqVK/PMoYpZs2bl2UUXX3xxjfOkdVwmT56cv7722mtz6Ln88stj48aNcdZZZ+Vz7k+dCwDQhANLMnbs2LzVtVBcdStWrPjQ86Velu985zt5AwDYnXsJAQDFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABSvZUNfAACUovs3/zWaohVTL4xG2cMyc+bM6N69e7Rp0yYGDRoUS5curbPtiy++GF/4whdy+2bNmsWMGTM+0Gby5Mn5sepbz5499+XSAIBGqN6BZf78+TFu3LiYNGlSLF++PPr27RtDhw6NdevW1dp+69atcfzxx8fUqVOjc+fOdZ73M5/5TLz11ltV2y9+8Yv6XhoA0EjVO7BMnz49xowZE6NHj45evXrF7Nmzo127djFnzpxa259xxhlx6623xogRI6J169Z1nrdly5Y50FS2jh071vfSAIBGql6BZfv27bFs2bIYMmTI/52gefO8v2TJkv26kFdffTW6du2ae2O+/OUvx8qVK+tsu23btti8eXONDQBovOoVWDZs2BA7duyITp061Tie9tesWbPPF5HqYO65555YuHBhzJo1K15//fU4++yz45133qm1/ZQpU6JDhw5VW7du3fb5ewMA5StiWvMFF1wQX/ziF6NPnz65HmbBggWxcePG+NGPflRr+wkTJsSmTZuqtlWrVh30awYACp3WnOpKWrRoEWvXrq1xPO3vqaC2vo444og46aST4rXXXqv18VQLs6d6GACgCfewtGrVKvr37x+LFi2qOrZz5868P3jw4I/sot5999347W9/G126dPnIzgkANKGF49KU5ksuuSQGDBgQAwcOzOuqbNmyJc8aSkaNGhXHHntsrjOpFOq+9NJLVV+/+eab8dxzz0X79u2jR48e+fg111wTf/InfxKf/vSnY/Xq1XnKdOrJGTly5Ef7agGAphFYhg8fHuvXr4+JEyfmQtt+/frlYtlKIW6a3ZNmDlWkAHLaaadV7U+bNi1v55xzTixevDgfe+ONN3I4efvtt+Poo4+Os846K5566qn8NQDAPi3NP3bs2LzVphJCKtIKt7t27drj+ebNm+eTAADKniUEALAnAgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKB4AgsAUDyBBQAonsACABRPYAEAiiewAADFE1gAgOIJLABA8QQWAKBxBpaZM2dG9+7do02bNjFo0KBYunRpnW1ffPHF+MIXvpDbN2vWLGbMmLHf5wQAmpZ6B5b58+fHuHHjYtKkSbF8+fLo27dvDB06NNatW1dr+61bt8bxxx8fU6dOjc6dO38k5wQAmpZ6B5bp06fHmDFjYvTo0dGrV6+YPXt2tGvXLubMmVNr+zPOOCNuvfXWGDFiRLRu3fojOScA0LTUK7Bs3749li1bFkOGDPm/EzRvnveXLFmyTxewL+fctm1bbN68ucYGADRe9QosGzZsiB07dkSnTp1qHE/7a9as2acL2JdzTpkyJTp06FC1devWbZ++NwBwaDgkZwlNmDAhNm3aVLWtWrWqoS8JADiAWtancceOHaNFixaxdu3aGsfTfl0FtQfinKkWpq56GACgifewtGrVKvr37x+LFi2qOrZz5868P3jw4H26gANxTgCgCfewJGn68SWXXBIDBgyIgQMH5nVVtmzZkmf4JKNGjYpjjz0215lUimpfeumlqq/ffPPNeO6556J9+/bRo0ePvTonANC01TuwDB8+PNavXx8TJ07MRbH9+vWLhQsXVhXNrly5Ms/yqVi9enWcdtppVfvTpk3L2znnnBOLFy/eq3MCAE1bvQNLMnbs2LzVphJCKtLqtbt27dqvcwIATdshOUsIAGhaBBYAoHgCCwBQPIEFACiewAIAFE9gAQCKJ7AAAMUTWACA4gksAEDxBBYAoHgCCwBQPIEFACiewAIAFE9gAQCKJ7AAAMUTWACA4gksAEDxBBYAoHgCCwBQPIEFACiewAIAFE9gAQCKJ7AAAMUTWACA4gksAEDxBBYA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", "text/plain": [ "
" ]