{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "6HTRLzyWW5Q1"
},
"source": [
"##### Copyright 2021 The Cirq Developers"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"cellView": "form",
"id": "oOggJBe6W5nF"
},
"outputs": [],
"source": [
"# @title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"# you may not use this file except in compliance with the License.\n",
"# You may obtain a copy of the License at\n",
"#\n",
"# https://www.apache.org/licenses/LICENSE-2.0\n",
"#\n",
"# Unless required by applicable law or agreed to in writing, software\n",
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"# See the License for the specific language governing permissions and\n",
"# limitations under the License."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9UinLMKSWRkA"
},
"source": [
"# Quantum circuits on Rigetti devices\n",
"⚠️ **Warning: the `cirq-rigetti` module was deprecated in Cirq version 1.5**",
" and will be removed in a subsequent version. ⚠️\n",
" \n",
" \n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8jnX4ti8W6Lg"
},
"source": [
"
"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "bd9529db1c0b"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"installing cirq...\n",
"\u001b[K |████████████████████████████████| 56 kB 668 kB/s \n",
"\u001b[K |████████████████████████████████| 593 kB 9.5 MB/s \n",
"\u001b[K |████████████████████████████████| 541 kB 16.4 MB/s \n",
"\u001b[K |████████████████████████████████| 48 kB 4.6 MB/s \n",
"\u001b[K |████████████████████████████████| 1.8 MB 47.1 MB/s \n",
"\u001b[K |████████████████████████████████| 53 kB 1.9 MB/s \n",
"\u001b[K |████████████████████████████████| 220 kB 55.7 MB/s \n",
"\u001b[K |████████████████████████████████| 52 kB 1.1 MB/s \n",
"\u001b[K |████████████████████████████████| 97 kB 5.9 MB/s \n",
"\u001b[K |████████████████████████████████| 49 kB 5.6 MB/s \n",
"\u001b[K |████████████████████████████████| 10.1 MB 42.9 MB/s \n",
"\u001b[K |████████████████████████████████| 65 kB 3.2 MB/s \n",
"\u001b[K |████████████████████████████████| 145 kB 70.0 MB/s \n",
"\u001b[K |████████████████████████████████| 38.1 MB 1.3 MB/s \n",
"\u001b[K |████████████████████████████████| 44 kB 139 kB/s \n",
"\u001b[K |████████████████████████████████| 229 kB 66.2 MB/s \n",
"\u001b[K |████████████████████████████████| 243 kB 55.2 MB/s \n",
"\u001b[K |████████████████████████████████| 1.6 MB 31.7 MB/s \n",
"\u001b[K |████████████████████████████████| 109 kB 58.9 MB/s \n",
"\u001b[K |████████████████████████████████| 546 kB 40.0 MB/s \n",
"\u001b[?25h Building wheel for lark (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Building wheel for retrying (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Building wheel for rpcq (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
"\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
"markdown 3.3.7 requires importlib-metadata>=4.4; python_version < \"3.10\", but you have importlib-metadata 3.10.1 which is incompatible.\n",
"google-colab 1.0.0 requires six~=1.15.0, but you have six 1.16.0 which is incompatible.\n",
"datascience 0.10.6 requires folium==0.2.1, but you have folium 0.8.3 which is incompatible.\n",
"albumentations 0.1.12 requires imgaug<0.2.7,>=0.2.5, but you have imgaug 0.2.9 which is incompatible.\u001b[0m\n",
"installed cirq.\n"
]
}
],
"source": [
"try:\n",
" import cirq\n",
" import cirq_rigetti\n",
"except ImportError:\n",
" print(\"installing cirq-rigetti...\")\n",
" !pip install --quiet cirq-rigetti\n",
" print(\"installed cirq-rigetti.\")\n",
" import cirq\n",
" import cirq_rigetti"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jApPwKwJZ76B"
},
"source": [
"Running this notebook requires the pyQuil QVM and Compiler. If you are running on Google Colab or a Linux Debian machine, you can run the below cell to install them if necessary. If you are on a non-Linux Debian machine, see [these instructions](https://pyquil-docs.rigetti.com/en/stable/start.html#downloading-the-qvm-and-compiler){:.external} for installation."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "8Jr6CdheZ76C"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[33m\r0% [Working]\u001b[0m\r \rHit:1 http://archive.ubuntu.com/ubuntu bionic InRelease\n",
"\u001b[33m\r0% [Waiting for headers] [Waiting for headers] [Connected to cloud.r-project.or\u001b[0m\r \rGet:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n",
"\r \rGet:3 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n",
"\r \rHit:4 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n",
"\u001b[33m\r0% [2 InRelease 14.2 kB/88.7 kB 16%] [3 InRelease 14.2 kB/88.7 kB 16%] [Waiting\u001b[0m\u001b[33m\r0% [1 InRelease gpgv 242 kB] [2 InRelease 14.2 kB/88.7 kB 16%] [3 InRelease 14.\u001b[0m\r \rGet:5 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ InRelease [3,626 B]\n",
"\u001b[33m\r0% [1 InRelease gpgv 242 kB] [2 InRelease 15.6 kB/88.7 kB 18%] [3 InRelease 43.\u001b[0m\u001b[33m\r0% [1 InRelease gpgv 242 kB] [2 InRelease 47.5 kB/88.7 kB 54%] [Connecting to p\u001b[0m\u001b[33m\r0% [1 InRelease gpgv 242 kB] [Waiting for headers] [Waiting for headers] [Waiti\u001b[0m\r \rGet:6 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]\n",
"\u001b[33m\r0% [1 InRelease gpgv 242 kB] [6 InRelease 2,604 B/74.6 kB 3%] [Waiting for head\u001b[0m\r \rIgn:7 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n",
"Hit:8 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release\n",
"Get:9 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic InRelease [15.9 kB]\n",
"Hit:10 http://ppa.launchpad.net/cran/libgit2/ubuntu bionic InRelease\n",
"Get:11 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease [15.9 kB]\n",
"Hit:12 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease\n",
"Get:13 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,512 kB]\n",
"Get:14 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2,799 kB]\n",
"Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [3,231 kB]\n",
"Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2,286 kB]\n",
"Get:18 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main Sources [1,992 kB]\n",
"Get:19 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main amd64 Packages [1,021 kB]\n",
"Get:20 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic/main amd64 Packages [45.3 kB]\n",
"Fetched 13.2 MB in 5s (2,876 kB/s)\n",
"Reading package lists... Done\n",
"Building dependency tree \n",
"Reading state information... Done\n",
"45 packages can be upgraded. Run 'apt list --upgradable' to see them.\n",
"Reading package lists... Done\n",
"Building dependency tree \n",
"Reading state information... Done\n",
"The following package was automatically installed and is no longer required:\n",
" libnvidia-common-460\n",
"Use 'apt autoremove' to remove it.\n",
"The following additional packages will be installed:\n",
" libjq1 libonig4\n",
"The following NEW packages will be installed:\n",
" jq libjq1 libonig4\n",
"0 upgraded, 3 newly installed, 0 to remove and 45 not upgraded.\n",
"Need to get 276 kB of archives.\n",
"After this operation, 930 kB of additional disk space will be used.\n",
"Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libonig4 amd64 6.7.0-1 [119 kB]\n",
"Get:2 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libjq1 amd64 1.5+dfsg-2 [111 kB]\n",
"Get:3 http://archive.ubuntu.com/ubuntu bionic/universe amd64 jq amd64 1.5+dfsg-2 [45.6 kB]\n",
"Fetched 276 kB in 0s (1,212 kB/s)\n",
"Selecting previously unselected package libonig4:amd64.\n",
"(Reading database ... 155632 files and directories currently installed.)\n",
"Preparing to unpack .../libonig4_6.7.0-1_amd64.deb ...\n",
"Unpacking libonig4:amd64 (6.7.0-1) ...\n",
"Selecting previously unselected package libjq1:amd64.\n",
"Preparing to unpack .../libjq1_1.5+dfsg-2_amd64.deb ...\n",
"Unpacking libjq1:amd64 (1.5+dfsg-2) ...\n",
"Selecting previously unselected package jq.\n",
"Preparing to unpack .../jq_1.5+dfsg-2_amd64.deb ...\n",
"Unpacking jq (1.5+dfsg-2) ...\n",
"Setting up libonig4:amd64 (6.7.0-1) ...\n",
"Setting up libjq1:amd64 (1.5+dfsg-2) ...\n",
"Setting up jq (1.5+dfsg-2) ...\n",
"Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n",
"Processing triggers for libc-bin (2.27-3ubuntu1.3) ...\n",
"/sbin/ldconfig.real: /usr/local/lib/python3.7/dist-packages/ideep4py/lib/libmkldnn.so.0 is not a symbolic link\n",
"\n",
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
" Dload Upload Total Spent Left Speed\n",
"100 54.1M 100 54.1M 0 0 25.5M 0 0:00:02 0:00:02 --:--:-- 25.5M\n",
"Verifying archive integrity... 0% \b\b\b\b\b\b\b 7% \b\b\b\b\b\b\b 14% \b\b\b\b\b\b\b 22% \b\b\b\b\b\b\b 29% \b\b\b\b\b\b\b 37% \b\b\b\b\b\b\b 44% \b\b\b\b\b\b\b 51% \b\b\b\b\b\b\b 59% \b\b\b\b\b\b\b 66% \b\b\b\b\b\b\b 74% \b\b\b\b\b\b\b 81% \b\b\b\b\b\b\b 89% \b\b\b\b\b\b\b 96% \b\b\b\b\b\b\b 100% MD5 checksums are OK. All good.\n",
"Uncompressing forest-sdk-deb 0% \b\b\b\b\b\b\b 7% \b\b\b\b\b\b\b 14% \b\b\b\b\b\b\b 22% \b\b\b\b\b\b\b 29% \b\b\b\b\b\b\b 37% \b\b\b\b\b\b\b 44% \b\b\b\b\b\b\b 51% \b\b\b\b\b\b\b 59% \b\b\b\b\b\b\b 66% \b\b\b\b\b\b\b 74% \b\b\b\b\b\b\b 81% \b\b\b\b\b\b\b 89% \b\b\b\b\b\b\b 96% \b\b\b\b\b\b\b 100% \n",
"Reading package lists... Done\n",
"Building dependency tree \n",
"Reading state information... Done\n",
"libblas-dev is already the newest version (3.7.1-4ubuntu1).\n",
"libblas-dev set to manually installed.\n",
"liblapack-dev is already the newest version (3.7.1-4ubuntu1).\n",
"The following package was automatically installed and is no longer required:\n",
" libnvidia-common-460\n",
"Use 'apt autoremove' to remove it.\n",
"The following NEW packages will be installed:\n",
" libffi-dev\n",
"0 upgraded, 1 newly installed, 0 to remove and 45 not upgraded.\n",
"Need to get 156 kB of archives.\n",
"After this operation, 362 kB of additional disk space will be used.\n",
"Get:1 http://archive.ubuntu.com/ubuntu bionic/main amd64 libffi-dev amd64 3.2.1-8 [156 kB]\n",
"Fetched 156 kB in 0s (728 kB/s)\n",
"Selecting previously unselected package libffi-dev:amd64.\n",
"(Reading database ... 155649 files and directories currently installed.)\n",
"Preparing to unpack .../libffi-dev_3.2.1-8_amd64.deb ...\n",
"Unpacking libffi-dev:amd64 (3.2.1-8) ...\n",
"Setting up libffi-dev:amd64 (3.2.1-8) ...\n",
"Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n",
"Selecting previously unselected package forest-sdk.\n",
"(Reading database ... 155684 files and directories currently installed.)\n",
"Preparing to unpack forest-sdk_2.23.0.deb ...\n",
"Unpacking forest-sdk (2.23.0) ...\n",
"Setting up forest-sdk (2.23.0) ...\n",
"Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n",
"1.23.0 [e6c0939]\n",
"1.17.1 [cf3f91f]\n"
]
}
],
"source": [
"! [ -z \"$(which qvm)\" ] &&\\\n",
" apt update &&\\\n",
" apt install jq &&\\\n",
" export LATEST_FOREST_SDK_VERSION=$(curl -s https://downloads.rigetti.com/qcs-sdk/versions | jq -r '.versions[0].sdk') &&\\\n",
" curl -f https://downloads.rigetti.com/qcs-sdk/forest-sdk-$LATEST_FOREST_SDK_VERSION-linux-deb.tar.bz2 -o $PWD/forest-sdk-$LATEST_FOREST_SDK_VERSION-linux-deb.tar.bz2 &&\\\n",
" tar -xf forest-sdk-$LATEST_FOREST_SDK_VERSION-linux-deb.tar.bz2 &&\\\n",
" ./forest-sdk-$LATEST_FOREST_SDK_VERSION-linux-deb/forest-sdk-$LATEST_FOREST_SDK_VERSION-linux-deb.run &&\\\n",
" quilc --version &&\\\n",
" qvm --version"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nXKo2957aEEx"
},
"source": [
"Next, run the pyQuil QVM and Compiler if they are not already running on their default ports."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "h2KPdYw1Z76D"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import subprocess\n",
"\n",
"subprocess.Popen([\"qvm\", \"--quiet\", \"-S\"])\n",
"subprocess.Popen([\"quilc\", \"--quiet\", \"-R\"])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7e4ac20b52e4"
},
"source": [
"# Running a Bell state circuit\n",
"\n",
"To demonstrate the basic functionality of the Cirq Rigetti integration, we begin constructing a basic Bell state circuit."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "5fc3c30fb03e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0: ───H───@───M('m')───\n",
" │ │\n",
"1: ───────X───M────────\n"
]
}
],
"source": [
"bell_circuit = cirq.Circuit()\n",
"qubits = cirq.LineQubit.range(2)\n",
"bell_circuit.append(cirq.H(qubits[0]))\n",
"bell_circuit.append(cirq.CNOT(qubits[0], qubits[1]))\n",
"bell_circuit.append(cirq.measure(qubits[0], qubits[1], key='m'))\n",
"print(bell_circuit)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fe7b4a94c8d6"
},
"source": [
"Next, we'll import `RigettiQCSService` and list available quantum processors."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "952d063c5cf1"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Aspen-11', 'Aspen-M-1']\n"
]
}
],
"source": [
"from cirq_rigetti import RigettiQCSService\n",
"\n",
"quantum_processors = RigettiQCSService.list_quantum_processors().quantum_processors\n",
"processors_list = [quantum_processor.id for quantum_processor in quantum_processors]\n",
"print(processors_list)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d36372ac05aa"
},
"source": [
"For now, we'll instantiate the `RigettiQCSService` as a pyQuil [Quantum Virtual Machine](https://docs.rigetti.com/qcs/references/qvm){:.external} based on the topology of one of the available Rigetti quantum processors. At the time of this writing, `Aspen-11` is available.\n",
"\n",
"Note, in addition to the quantum processors listed above, you can also instantiate the `RigettiQCSService` by naming an arbitrary virtual device the pyQuil QVM supports. See the documentation for pyquil [get_qc](https://pyquil-docs.rigetti.com/en/stable/apidocs/pyquil.api.html#pyquil.api.get_qc){:.external} for more information. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "e814a6986f88"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Aspen-11\n",
"Counter({3: 529, 0: 471})\n"
]
}
],
"source": [
"from cirq_rigetti import circuit_transformers, circuit_sweep_executors, get_rigetti_qcs_service\n",
"\n",
"SERVICE_NAME = processors_list[0]\n",
"print(SERVICE_NAME)\n",
"service = get_rigetti_qcs_service(SERVICE_NAME, as_qvm=True, noisy=False)\n",
"result = service.run(bell_circuit, repetitions=1000)\n",
"\n",
"print(result.histogram(key='m'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "e1b4702074dc"
},
"source": [
"We'll use the built-in `cirq.plot_state_histogram` to visually verify the results of our Bell state."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "01da874989f1"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cirq.plot_state_histogram(result.histogram(key='m'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "a67480865446"
},
"source": [
"As expected, we see states 0 (ie '00') and 3 (ie '11') as the dominant results.\n",
"\n",
"You may initialize both the `RigettiQCSService` and `RigettiQCSSampler` with execution functions from the `cirq_rigetti.circuit_sweep_executor` module and transformation functions from `cirq_rigetti.circuit_transformations`.\n",
"\n",
"You may invoke these functions with arguments for controlling your circuit execution at a more fine grained level. For instance, you may want add [Pragma statements](https://pyquil-docs.rigetti.com/en/stable/compiler.html#region-specific-compiler-features-through-pragma){:.external} to set the [initial rewiring](https://pyquil-docs.rigetti.com/en/stable/compiler.html#initial-rewiring){:.external} strategy, invoke [active qubit reset](https://arxiv.org/abs/2001.04449){:.external} prior to execution, or explicitly address physical qubits on the quantum computer."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "ec8335f28b75"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RESET\n",
"PRAGMA INITIAL_REWIRING \"GREEDY\"\n",
"DECLARE m0 BIT[2]\n",
"H 4\n",
"CNOT 4 5\n",
"MEASURE 4 m0[0]\n",
"MEASURE 5 m0[1]\n",
"\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from pyquil.quilbase import Reset, Pragma\n",
"\n",
"\n",
"def hook(program, measurement_id_map):\n",
" program._instructions.insert(0, Reset())\n",
" program._instructions.insert(1, Pragma('INITIAL_REWIRING', freeform_string='GREEDY'))\n",
" print(program)\n",
" return program, measurement_id_map\n",
"\n",
"\n",
"# assign qubits explicitly to hardware or virtual machine qubits.\n",
"qubit_id_map = {qubits[0]: 4, qubits[1]: 5}\n",
"executor = circuit_sweep_executors.with_quilc_compilation_and_cirq_parameter_resolution\n",
"transformer = circuit_transformers.build(\n",
" qubit_id_map=qubit_id_map, qubits=qubits, post_transformation_hooks=[hook]\n",
")\n",
"service = get_rigetti_qcs_service(\n",
" SERVICE_NAME, as_qvm=True, executor=executor, transformer=transformer\n",
")\n",
"result = service.run(bell_circuit, repetitions=1000)\n",
"\n",
"cirq.plot_state_histogram(result.histogram(key='m'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "63a5382dc703"
},
"source": [
"# Running a parameterized circuit\n",
"\n",
"Of course, you may be running a parameterized circuit and would like to leverage the [Quil compilers](https://pyquil-docs.rigetti.com/en/stable/compiler.html){:.external} support for parametric compilation. This affords a speedup in execution times as the Cirq Rigetti integration will only compile the circuit once for a single parameter sweep.\n",
"\n",
"We start by initializing the `RigettiQCSSampler` and specifying a circuit sweep executor that supports parametric compilation. Note, that this class accepts the same `executor` and `transformer` types as `RigettiQCSService`."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"id": "58580fce0973"
},
"outputs": [],
"source": [
"from cirq_rigetti import get_rigetti_qcs_sampler\n",
"\n",
"executor = circuit_sweep_executors.with_quilc_parametric_compilation\n",
"sampler = get_rigetti_qcs_sampler(SERVICE_NAME, as_qvm=True, executor=executor)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "64190bcafd2c"
},
"source": [
"Next, we will initialize a parameterized circuit in Cirq along with a set of parameter values."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "566e68350c37"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0: ───H^t───M('m')───\n"
]
}
],
"source": [
"import sympy\n",
"\n",
"qubit = cirq.LineQubit.range(1)[0]\n",
"\n",
"circuit = cirq.Circuit(cirq.H(qubit) ** sympy.Symbol('t'), cirq.measure(qubit, key='m'))\n",
"params = cirq.Linspace('t', start=0, stop=4, length=5)\n",
"\n",
"print(circuit)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "27c27f8eca4a"
},
"source": [
"In much the same way that we invoke, `RigettiQCSSerivce.run`, we invoke `RigettiQCSSampler.run_sweep` with our parameters here."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"id": "f0b7ac7a63b5"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" t=0.0 \n",
" t=1.0 \n",
" t=2.0 \n",
" t=3.0 \n",
" t=4.0 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 5 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 6 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 7 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 8 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 9 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
],
"text/plain": [
" t=0.0 t=1.0 t=2.0 t=3.0 t=4.0\n",
"0 0 0 0 1 0\n",
"1 0 1 0 0 0\n",
"2 0 0 0 1 0\n",
"3 0 0 0 0 0\n",
"4 0 0 0 0 0\n",
"5 0 0 0 1 0\n",
"6 0 1 0 0 0\n",
"7 0 1 0 1 0\n",
"8 0 0 0 1 0\n",
"9 0 0 0 0 0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"results = sampler.run_sweep(circuit, params, repetitions=10)\n",
"data = {\n",
" f't={result.params[\"t\"]}': [measurement[0] for measurement in result.measurements['m']]\n",
" for result in results\n",
"}\n",
"\n",
"pd.DataFrame(data)"
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "getting_started.ipynb",
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}