{ "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", "