{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sequence Creation and Validation\n", "\n", "*What you will learn:*\n", "\n", "- what a Pulser `Sequence` is;\n", "- what you can do with a `Sequence`;\n", "- how to make sure your `Sequence` is valid." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Pulser `Sequence`\n", "\n", "The `Sequence` is what encapsulates a Pulser program and it brings together all the concepts we have introduced so far in the *Fundamentals* section. Concretely, a `Sequence` combines:\n", "\n", "- a [Register](register.ipynb) that defines the relative positions of the atoms involved in the computation;\n", "- a [Device](hardware.ipynb#The-Device) that dictates the physical constraints the program must respect;\n", "- [Channels](hardware.ipynb#The-Channels), selected from the `Device`, that define which states are used in the computation;\n", "- a schedule of operations, wherein [Pulses](pulses.ipynb) are included, that determine what happens over time.\n", "\n", "As described in [Programming a Neutral-Atom QPU](programming.md) and exemplified in the [Tutorial: ](tutorials/creating.nblink), constructing a `Sequence` is akin to programming a [time-dependent Hamiltonian](programming.md#hamiltonian-evolves-the-state). This program can then be given to a [Backend](tutorials/backends.nblink) that will evolve an initial state according to the programmed Hamiltonian, producing a result.\n", "\n", "The pages linked above covered the step-by-step process of constructing a `Sequence`. In this page, we will instead highlight the most relevant capabilities of the `Sequence` object itself." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fundamental `Sequence` Capabilities\n", "\n", "In this section, we focus only on the fundamental features for programming a sequence in Pulser.\n", "\n", "
\n", "\n", "See Also\n", " \n", "All the `Sequence` properties and methods can be found in [its API reference](apidoc/_autosummary/pulser.sequence.Sequence.rst).\n", "\n", "
\n", "\n", "### Building" ] }, { "cell_type": "raw", "metadata": { "editable": true, "raw_mimetype": "text/restructuredtext", "slideshow": { "slide_type": "" }, "tags": [], "vscode": { "languageId": "raw" } }, "source": [ ".. currentmodule:: pulser.sequence\n", "\n", ".. autosummary::\n", "\n", " Sequence.declare_channel\n", " Sequence.add\n", " Sequence.delay\n", " Sequence.measure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These four method are all you need to build a basic Pulser `Sequence`. As shown in [this tutorial](tutorials/creating.nblink), they should be used in this order:\n", "\n", "1. Pick a channel from the `Device` and declare it with `Sequence.declare_channel()`.\n", "2. Add pulses and delays to the channel with `Sequence.add()` and `Sequence.delay()`.\n", "3. Terminate the sequence with `Sequence.measure()`.\n", "\n", "
\n", "\n", "Tip\n", " \n", "For more details on each of these methods, click on them in the table above.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inspecting\n", "\n", "During and after the sequence building process, you migh want to inspect or access its contents. These properties and methods allow you to do so:" ] }, { "cell_type": "raw", "metadata": { "editable": true, "raw_mimetype": "text/restructuredtext", "slideshow": { "slide_type": "" }, "tags": [], "vscode": { "languageId": "raw" } }, "source": [ ".. currentmodule:: pulser.sequence\n", "\n", ".. rubric:: Properties\n", "\n", ".. autosummary::\n", " :nosignatures:\n", "\n", " Sequence.declared_channels\n", " Sequence.device\n", "\n", ".. rubric:: Methods\n", "\n", ".. autosummary::\n", "\n", " Sequence.draw\n", " Sequence.get_addressed_bases\n", " Sequence.get_addressed_states\n", " Sequence.get_duration\n", " Sequence.get_measurement_basis\n", " Sequence.get_register\n", " Sequence.is_measured" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Drawing and Printing\n", "\n", "In particular, it is often useful to visualize a `Sequence`'s contents, which we can do either by **drawing** or **printing**. \n", "Let's exemplify these two options with the very simple sequence in [this tutorial](tutorials/creating.nblink#Preparing-an-atom-in-the-Rydberg-state)." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Channel: rydberg_global\n", "t: 0 | Initial targets: q0 | Phase Reference: 0.0 \n", "t: 0->1000 | Pulse(Amp=3.14 rad/µs, Detuning=0 rad/µs, Phase=0) | Targets: q0\n", "\n", "\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABp0AAAEvCAYAAAC35glfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACKy0lEQVR4nOzdd3xUdb7/8feZJJM+6Y0AAUSKdLBhAwXbYkF3XXVdsay6+rMuey24ay94r+uiq177iu7q2q5iLyyCqKBSRCBAqEkgyaQnkzpJZs7vj2yicYAQJpMpeb3ug4dm5nvO85urSc7m45kxTNM0RURERERERERERERERORFFn9vgIiIiIiIiIiIiIiIiII/hk5ERERERERERERERETkdQydiIiIiIiIiIiIiIiIyOsYOhEREREREREREREREZHXMXQiIiIiIiIiIiIiIiIir2PoRERERERERERERERERF7H0ImIiIiIiIiIiIiIiIi8jqETEREREREREREREREReR1DJyIiIiIiIiIiIiIiIvI6hk5ERERERERERERERETkdQydiIiIiIiIiIiIiIiIyOsYOhEREREREREREREREZHXhft7A+SfCgoK9NZbb+m7775TbU2NTNPt9TktljAlJiXpuOOO0y9/+UtlZmb2wk6JiIiIiIiIiIiIiCgYMkzTNP29CfJtbrdbxcXFio+Pl2mauvnmm/X8888rMsKiqYdKybFuWQzvHZdbKq+z6Jvtplxu6dZbb9Vtt90mw+iFkxMRERERERERERERUa9kmqbq6uo0YMAAWSy996J4DJ36QXv27NGgQYM6PzYkPfJb6YrpUnx073tV9dKCj6X7F/X+uYmIiIiIiIiIiIiIqHfavXu3Bg4c2Gvn4+X1+kHx8fGSpO+//15TpkzWg7829YfTfeclx0n3nSfVN0vPfxmt7Tt2KTr6wKdbb775ps477zzfbZCIiIiIiIiIiIiIqB/ncDg0aNCgzvlBb8XQqR/U8fJ2S5culWFIv5veN+7vZ0iPftKklStXavbs2Qd8XExMjGw2m+82RkREREREREREREREvf72OL33Qn0U8P3www+akBOm1N4dXO6zUQOkrORwrV27tkfHHX/88T7aERERERERERERERER+SqGTv2o+vp6JUa7+9RMijXkcDh6dIzdbvfRboiIiIiIiIiIiIiIyFcxdOpHmaYpSx//E7cY7W5P2rZtm492Q0REREREREREREREvoqhEwVcvf0akkRERERERERERERE5PsYOlGPe2aJdNjNvjv/BRdc4LuTExERERERERERERGRT2LoRD2uok7KK/Hd+RctWuS7kxMRERERERERERERkU9i6EQBV1NTk7+3QEREREREREREREREPYyhEwVcgwYN8vcWiIiIiIiIiIiIiIiohzF0ooBr1KhR/t4CERERERERERERERH1MIZOfdxTTz2l8ePHy2azyWazaerUqfr444/3uX7hwoUyDKPLn6ioqD7ccd+3ePFif2+BiIiIiIiIiIiIiIh6WLi/N9DfGjhwoB566CEdeuihMk1TL730ks4++2x9//33GjNmzF6PsdlsysvL6/zYMIxe39dfPzrwtV9v7XWeiIiIiIiIiIiIiIiCPIZOfdyZZ57Z5eMHHnhATz31lL755pt9Dp0Mw1BmZqZP9/Vfr/Zsfe+PvX7smGOO8eHZiYiIiIiIiIiIiIjIFzF08mMul0tvvvmmGhoaNHXq1H2uq6+vV05OjtxutyZPnqwHH3xwnwMqSXI6nXI6nZ0fOxyObvey9E8927svq6qqUk5Ojr+3QUREREREREREREREPYihkx/asGGDpk6dqubmZsXFxemdd97RYYcdtte1I0eO1N///neNHz9etbW1+stf/qJjjjlGubm5Gjhw4F6PmT9/vu65554e7Wna6B5/Gj5ry5YtmjRpkr+3QUREREREREREREREPcji7w30x0aOHKl169bp22+/1TXXXKNLLrlEmzZt2uvaqVOnas6cOZo4caKmTZumt99+W2lpaXrmmWf2ef558+aptra288/u3bt7df/f7ZCufqFXT0lEREREREREREREREEedzr5IavVquHDh0uSpkyZolWrVumxxx7b7yCpo4iICE2aNEnbt2/f55rIyEhFRkb22n4lqbJOevkr6e/LpE1F7Y89/bteJTr79a9/7ZsTExERERERERERERGRz+JOpwDI7XZ3eQ+m/eVyubRhwwZlZWX5eFeSaUofr5N+9aiUfb30x1ekBqc09xfS13f5zv3oo498d3IiIiIiIiIiIiIiIvJJ3OnUx82bN0+nn366Bg8erLq6Or366qtatmyZPv30U0nSnDlzlJ2drfnz50uS7r33Xh199NEaPny4ampq9PDD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0KDLLrtMkjRnzhxlZ2dr/vz5kqQbb7xR06ZN0yOPPKJZs2bptdde0+rVq/Xss8/689MgIiIiIiIiIiIiIiLqjKGTHzr//PNVXl6uO++8U3a7XRMnTtQnn3yijIwMSVJhYaEslh9vQjvmmGP06quv6s9//rNuv/12HXrooVq0aJHGjh3rr0/BZ0VGRuquu+7yeHlAIuof8T2AqP/G1z9R/47vAUT9N77+ifp3fA8gCr0M0zRNf2+CiIiIiIiIiIiIiIiIgjve04mIiIiIiIiIiIiIiIi8jqETEREREREREREREREReR1DJyIiIiIiIiIiIiIiIvI6hk5ERERERERERERERETkdQydKKB68sknNWTIEEVFRemoo47Sd9995+8tEZGXzZ8/X0cccYTi4+OVnp6u2bNnKy8vr8ua5uZmXXvttUpJSVFcXJx++ctfqrS0tMuawsJCzZo1SzExMUpPT9fNN9+stra2vvxUiMjLHnroIRmGoZtuuqnzMb7+iUK7oqIi/fa3v1VKSoqio6M1btw4rV69uvN50zR15513KisrS9HR0Zo5c6a2bdvW5RxVVVW66KKLZLPZlJiYqN/97neqr6/v60+FiHqQy+XSHXfcoaFDhyo6OlqHHHKI7rvvPpmm2bmGr3+i0Gn58uU688wzNWDAABmGoUWLFnV5vre+3tevX6/jjz9eUVFRGjRokP7nf/7H158aER1EDJ0oYHr99dc1d+5c3XXXXVq7dq0mTJigU089VWVlZf7eGhF50RdffKFrr71W33zzjRYvXqzW1ladcsopamho6Fzzhz/8Qe+//77efPNNffHFFyouLta5557b+bzL5dKsWbPU0tKiFStW6KWXXtLChQt15513+uNTIqKDaNWqVXrmmWc0fvz4Lo/z9U8UulVXV+vYY49VRESEPv74Y23atEmPPPKIkpKSOtf8z//8j/72t7/p6aef1rfffqvY2Fideuqpam5u7lxz0UUXKTc3V4sXL9YHH3yg5cuX66qrrvLHp0REB9h///d/66mnntITTzyhzZs367//+7/1P//zP3r88cc71/D1TxQ6NTQ0aMKECXryySf3+nxvfL07HA6dcsopysnJ0Zo1a/Twww/r7rvv1rPPPuvzz4+IephJFCAdeeSR5rXXXtv5scvlMgcMGGDOnz/fj7siot6urKzMlGR+8cUXpmmaZk1NjRkREWG++eabnWs2b95sSjJXrlxpmqZpfvTRR6bFYjHtdnvnmqeeesq02Wym0+ns20+AiHpcXV2deeihh5qLFy82p02bZt54442mafL1TxTq3XrrreZxxx23z+fdbreZmZlpPvzww52P1dTUmJGRkea//vUv0zRNc9OmTaYkc9WqVZ1rPv74Y9MwDLOoqMh3mycir5o1a5Z5+eWXd3ns3HPPNS+66CLTNPn6JwrlJJnvvPNO58e99fX+v//7v2ZSUlKX/w1w6623miNHjvTxZ0REPY07nSggamlp0Zo1azRz5szOxywWi2bOnKmVK1f6cWdE1NvV1tZKkpKTkyVJa9asUWtra5ev/1GjRmnw4MGdX/8rV67UuHHjlJGR0bnm1FNPlcPhUG5ubh/unogOpmuvvVazZs3q8nUu8fVPFOq99957Ovzww3XeeecpPT1dkyZN0nPPPdf5/K5du2S327t8D0hISNBRRx3V5XtAYmKiDj/88M41M2fOlMVi0bffftt3nwwR9ahjjjlGS5Ys0datWyVJP/zwg7766iudfvrpkvj6J+pP9dbX+8qVK3XCCSfIarV2rjn11FOVl5en6urqPvpsiOhACvf3BogkqaKiQi6Xq8svlCQpIyNDW7Zs8dOuiKi3c7vduummm3Tsscdq7NixkiS73S6r1arExMQuazMyMmS32zvX7O37Q8dzRBS4vfbaa1q7dq1WrVrl8Rxf/0Sh3c6dO/XUU09p7ty5uv3227Vq1SrdcMMNslqtuuSSSzq/hvf2Nf7T7wHp6eldng8PD1dycjLfA4gCuNtuu00Oh0OjRo1SWFiYXC6XHnjgAV100UWSxNc/UT+qt77e7Xa7hg4d6nGOjud++vK9ROTfGDoREVGfde2112rjxo366quv/L0VIuqDdu/erRtvvFGLFy9WVFSUv7dDRH2c2+3W4YcfrgcffFCSNGnSJG3cuFFPP/20LrnkEj/vjoh82RtvvKFXXnlFr776qsaMGaN169bppptu0oABA/j6JyIiCvF4eT0KiFJTUxUWFqbS0tIuj5eWliozM9NPuyKi3uy6667TBx98oKVLl2rgwIGdj2dmZqqlpUU1NTVd1v/06z8zM3Ov3x86niOiwGzNmjUqKyvT5MmTFR4ervDwcH3xxRf629/+pvDwcGVkZPD1TxTCZWVl6bDDDuvy2OjRo1VYWCjpx6/h/f1vgMzMTJWVlXV5vq2tTVVVVXwPIArgbr75Zt1222264IILNG7cOF188cX6wx/+oPnz50vi65+oP9VbX+/87wKi4ImhEwVEVqtVU6ZM0ZIlSzofc7vdWrJkiaZOnerHnRGRt5mmqeuuu07vvPOOPv/8c4/b4adMmaKIiIguX/95eXkqLCzs/PqfOnWqNmzY0OUidPHixbLZbB6/zCKiwGnGjBnasGGD1q1b1/nn8MMP10UXXdT593z9E4Vuxx57rPLy8ro8tnXrVuXk5EiShg4dqszMzC7fAxwOh7799tsu3wNqamq0Zs2azjWff/653G63jjrqqD74LIjoYGpsbJTF0vVXTmFhYXK73ZL4+ifqT/XW1/vUqVO1fPlytba2dq5ZvHixRo4cyUvrEQVaJlGA9Nprr5mRkZHmwoULzU2bNplXXXWVmZiYaNrtdn9vjYi86JprrjETEhLMZcuWmSUlJZ1/GhsbO9dcffXV5uDBg83PP//cXL16tTl16lRz6tSpnc+3tbWZY8eONU855RRz3bp15ieffGKmpaWZ8+bN88enREReNG3aNPPGG2/s/Jivf6LQ7bvvvjPDw8PNBx54wNy2bZv5yiuvmDExMeY///nPzjUPPfSQmZiYaL777rvm+vXrzbPPPtscOnSo2dTU1LnmtNNOMydNmmR+++235ldffWUeeuih5oUXXuiPT4mIDrBLLrnEzM7ONj/44ANz165d5ttvv22mpqaat9xyS+cavv6JQqe6ujrz+++/N7///ntTkvnXv/7V/P77782CggLTNHvn672mpsbMyMgwL774YnPjxo3ma6+9ZsbExJjPPPNMn3++RLT/GDpRQPX444+bgwcPNq1Wq3nkkUea33zzjb+3REReJmmvf1588cXONU1NTeb/+3//z0xKSjJjYmLMc845xywpKelynvz8fPP00083o6OjzdTUVPOPf/yj2dra2sefDRF528+HTnz9E4V277//vjl27FgzMjLSHDVqlPnss892ed7tdpt33HGHmZGRYUZGRpozZsww8/LyuqyprKw0L7zwQjMuLs602WzmZZddZtbV1fXlp0FEPczhcJg33nijOXjwYDMqKsocNmyY+ac//cl0Op2da/j6Jwqdli5dutf/3X/JJZeYptl7X+8//PCDedxxx5mRkZFmdna2+dBDD/XVp0hEPcgwTdP0zz1WREREREREREREREREFCrxnk5ERERERERERERERETkdQydiIiIiIiIiIiIiIiIyOsYOhEREREREREREREREZHXMXQiIiIiIiIiIiIiIiIir2PoRERERERERERERERERF7H0ImIiIiIiIiIiIiIiIi8jqETEREREREREREREREReR1DJyIiIiIiIiIiIiIiIvI6hk5EREREREQh1i9+8QtdeeWVPjl3ZWWlYmNj9dFHH/nk/EREREREFLwZpmma/t4EERERERERebZixQp99tlnuummm5SYmHhAx3z99deaNm2atmzZouHDh/tkXzfeeKO++uorrVmzxifnJyIiIiKi4Iw7nYiIiIiIiAK0FStW6J577lFNTc0BH/Pwww9rxowZPhs4SdLVV1+ttWvX6vPPP/eZQUREREREwRdDJyIiIiIiohCprKxMH374oX7961/71Bk9erTGjh2rhQsX+tQhIiIiIqLgiqETERERERFRAHb33Xfr5ptvliQNHTpUhmHIMAzl5+fv85gPP/xQbW1tmjlzZpfHFy5cKMMw9PXXX2vu3LlKS0tTbGyszjnnHJWXl3dZu3r1ap166qlKTU1VdHS0hg4dqssvv9zDOvnkk/X++++LV2wnIiIiIqKOwv29ASIiIiIiIvLs3HPP1datW/Wvf/1LCxYsUGpqqiQpLS1tn8esWLFCKSkpysnJ2evz119/vZKSknTXXXcpPz9fjz76qK677jq9/vrrktrvlDrllFOUlpam2267TYmJicrPz9fbb7/tca4pU6ZowYIFys3N1dixY3vhMyYiIiIiomCPoRMREREREVEANn78eE2ePFn/+te/NHv2bA0ZMqTbY7Zs2bLfdSkpKfrss89kGIYkye12629/+5tqa2uVkJCgFStWqLq6Wp999pkOP/zwzuPuv/9+j3MNGzZMkrRp0yaGTkREREREJImX1yMiIiIiIgqZKisrlZSUtM/nr7rqqs6BkyQdf/zxcrlcKigokCQlJiZKkj744AO1trbu1+pwKir+f3t3zNJWFAZg+GvVSTCDgosoIoLiIgRFp7gaCSIuzg5ODu5OIu5OImQQh0AI/gBBJx0EMZtCJjM5CJUr6OJiOxlqtaX1ttSmz7MlnOQ7d36553xKuWsAAKBZiE4AAABN5Ed3LPX29j77/BSOkiSJiIhcLhfz8/OxtrYWXV1dMTs7Gzs7O/Hw8PDdOV9HLAAA4P8mOgEAADSJzs7ORkB6TUtLy6vffx2Q9vb24uTkJJaXl+Pq6ioWFxcjm83G/f39s988zXm6awoAAEB0AgAAeKd+9S2ioaGhqNfrqedOTEzExsZGnJ2dRalUiouLiyiXy8/WPM0ZHh5OPQ8AAGgOohMAAMA71d7eHhERt7e3P7V+cnIykiSJy8vLN81LkuTF8Xyjo6MRES+O2KtWq5HJZGJkZORNswAAgObT+rc3AAAAwOuy2WxERKyursbCwkK0tbVFoVBoxKhvzczMRGtraxweHsbS0tIvz9vd3Y2tra2Ym5uLgYGBuLu7i2KxGB0dHZHP55+tPTg4iEKh4E4nAACgQXQCAAB4p8bGxmJ9fT22t7djf38/Hh8fo16vfzc6dXd3Rz6fj0ql8qbolMvl4vT0NMrlclxfX0cmk4nx8fEolUrR39/fWFer1eL8/Dw2Nzff+mgAAEAT+vD527MTAAAA+GcdHx/H1NRU1Gq1GBwc/CMzVlZW4ujoKKrVqjedAACABtEJAACgyUxPT0dPT08Ui8Xf/t83NzfR19cXlUrlxZF7AADA/010AgAAAAAAILWPf3sDAAAAAAAA/PtEJwAAAAAAAFITnQAAAAAAAEhNdAIAAAAAACA10QkAAAAAAIDURCcAAAAAAABSE50AAAAAAABITXQCAAAAAAAgNdEJAAAAAACA1EQnAAAAAAAAUvsCYKNlHs0R9fsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pulser\n", "\n", "sequence = pulser.Sequence(\n", " pulser.Register({\"q0\": (0, 0)}), pulser.AnalogDevice\n", ")\n", "sequence.declare_channel(\"rydberg_global\", \"rydberg_global\")\n", "pulse = pulser.Pulse.ConstantPulse(1000, 3.14, 0, 0)\n", "sequence.add(pulse, \"rydberg_global\")\n", "\n", "print(sequence)\n", "sequence.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- With `print(sequence)`, we have access to its contents in text form. This is particularly useful to access the exact timings of each instruction. \n", "\n", "
\n", "\n", "Tip\n", "\n", "To get the text representation of a sequence as a string, e.g. for saving it to a file, call `str(sequence)` instead.\n", "\n", "
\n", "\n", "\n", "- With `sequence.draw()`, we see a plot of the channel's contents over time. This method is [highly configurable](apidoc/_autosummary/pulser.sequence.Sequence.rst#pulser.sequence.Sequence.draw), though most of its options are related to features we have not yet covered.\n", "\n", "
\n", "\n", "**Understanding** `Sequence.draw()`:\n", "\n", "You might have noticed that **two overlapping curves appear when you draw the** `Sequence`. These represent the pulse you programmed (shaded in solid color) and the *modulated pulse* we expect to actually reach the atoms (hashed with diagonal lines). You can find an explation for this effect and its implications in [this tutorial](tutorials/output_mod_eom.nblink).\n", "\n", "
\n", "\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Runtime Validation\n", "\n", "Alongside containing all the information necessary for execution on a backend, the `Sequence`'s main function is to ensure that all its contents respect the [Device specifications](hardware.ipynb).\n", "\n", "Here is an example: \n", "\n", "- `pulser.AnalogDevice` has a defined `min_atom_distance`, a minimum distance that must be respected between any two atoms in a register;\n", "- if we create a `Register` where two atoms are closer than this distance, it will not respect the device's constraints;\n", "- therefore, once they are both given to the `Sequence` it will complain right away, giving us a chance to modify our register or choose a new device before we proceed with the `Sequence` creation." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Failed with error: The minimal distance between atoms in this device (5 µm) is not respected (up to a precision of 1e-6 µm) for the pairs: [('q0', 'q1')]\n" ] } ], "source": [ "import pulser\n", "\n", "spacing = 2 # The spacing we will use between atoms\n", "reg = pulser.Register({\"q0\": (0, 0), \"q1\": (spacing, 0)})\n", "\n", "# spacing is below the AnalogDevice's specs, so we expect an error\n", "assert spacing < pulser.AnalogDevice.min_atom_distance\n", "\n", "try:\n", " pulser.Sequence(reg, pulser.AnalogDevice)\n", "except ValueError as e:\n", " print(\"Failed with error: \", e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Important\n", " \n", "This automatic validation occurs upon every addition to the `Sequence` so that, if something is invalid, it is caught and corrected right away. By the same token, **if a Sequence is constructed without any errors, it is automatically ensured to be valid against the chosen device's constraints**.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Switching the device" ] }, { "cell_type": "raw", "metadata": { "editable": true, "raw_mimetype": "text/restructuredtext", "slideshow": { "slide_type": "" }, "tags": [], "vscode": { "languageId": "raw" } }, "source": [ "Sometimes, one wants to change the device of an already constructed ``Sequence``. Before manually reconstructing the ``Sequence`` with the new device, one can try the :py:class:`~pulser.sequence.Sequence.with_new_device()` method: \n", "\n", ".. autofunction:: pulser.Sequence.with_new_device" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This method attemps to automatically reconstruct the sequence with the new device, which will only succeed if the new sequence is valid on the new device. \n", "\n", "
\n", "\n", "Attention\n", " \n", "This switch may modify the contents of the `Sequence` — to ensure the contents stay unchanged, set `strict=True`.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Backend-specific validation\n", "\n", "There are a handful of backend-specific constraints that are not enforced during sequence construction. This is because execution on a [QPU enforces additional restrictions](tutorials/qpu.nblink#1.-Preparation-for-execution-on-QPUBackend) that don't directly affect the programmed Hamiltonian, so they are not enforced by default. Nonetheless, **when using an emulator to fully mimic the QPU execution process, all the QPU constraints can be enabled via the** `mimic_qpu` **argument**." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }