{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "EN3BM2a0JLJR" }, "source": [ "##### Copyright 2020 Google" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2024-10-18T09:30:47.924633Z", "iopub.status.busy": "2024-10-18T09:30:47.924350Z", "iopub.status.idle": "2024-10-18T09:30:47.928649Z", "shell.execute_reply": "2024-10-18T09:30:47.928030Z" }, "id": "sVv2bPc0JMdM" }, "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": "yaieLbziJTX5" }, "source": [ "# Hardware grid circuits" ] }, { "cell_type": "markdown", "metadata": { "id": "P2-jS0d9KI4r" }, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " View on QuantumAI\n", " \n", " Run in Google Colab\n", " \n", " View source on GitHub\n", " \n", " Download notebook\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "p7FRu0xXIfBW" }, "source": [ "The \"hardware grid\" problem is defined by a Hamiltonian whose topology matches the hardware graph natively. This permits a simple compilation (\"routing\") with circuit depth per p-step going like $O(1)$." ] }, { "cell_type": "markdown", "metadata": { "id": "JgZdtr7hKaFJ" }, "source": [ "## Setup\n", "\n", "Install the ReCirq package:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:30:47.931917Z", "iopub.status.busy": "2024-10-18T09:30:47.931671Z", "iopub.status.idle": "2024-10-18T09:31:16.441578Z", "shell.execute_reply": "2024-10-18T09:31:16.440622Z" }, "id": "NN9a0rDMKa5G" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting git+https://github.com/quantumlib/ReCirq\r\n", " Cloning https://github.com/quantumlib/ReCirq to /tmpfs/tmp/pip-req-build-nwz4bvfu\r\n", " Running command git clone --filter=blob:none --quiet https://github.com/quantumlib/ReCirq /tmpfs/tmp/pip-req-build-nwz4bvfu\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Resolved https://github.com/quantumlib/ReCirq to commit 07da5b164e0335830e74c582760718b2d57ba04a\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Preparing metadata (setup.py) ... \u001b[?25l-" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b \bdone\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[?25hCollecting cirq-core>=1.2.0 (from recirq==0.1.dev0)\r\n", " Using cached cirq_core-1.4.1-py3-none-any.whl.metadata (1.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting cirq-google>=1.2.0 (from recirq==0.1.dev0)\r\n", " Using cached cirq_google-1.4.1-py3-none-any.whl.metadata (2.0 kB)\r\n", "Requirement already satisfied: seaborn in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (0.13.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting sphinx (from recirq==0.1.dev0)\r\n", " Using cached sphinx-8.1.3-py3-none-any.whl.metadata (6.4 kB)\r\n", "Requirement already satisfied: ipython in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (8.28.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting black (from recirq==0.1.dev0)\r\n", " Using cached black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB)\r\n", "Collecting Py-BOBYQA (from recirq==0.1.dev0)\r\n", " Using cached Py_BOBYQA-1.5.0-py3-none-any.whl.metadata (9.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pytket-cirq>=0.16 (from recirq==0.1.dev0)\r\n", " Using cached pytket_cirq-0.38.0-py3-none-any.whl.metadata (4.3 kB)\r\n", "Requirement already satisfied: scikit-learn in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (1.5.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting openfermion>=1.2.0 (from recirq==0.1.dev0)\r\n", " Using cached openfermion-1.6.1-py3-none-any.whl.metadata (10 kB)\r\n", "Requirement already satisfied: absl-py in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (2.1.0)\r\n", "Collecting fqe (from recirq==0.1.dev0)\r\n", " Using cached fqe-0.3.0-cp310-cp310-linux_x86_64.whl\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting filelock (from recirq==0.1.dev0)\r\n", " Using cached filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)\r\n", "Requirement already satisfied: joblib in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (1.4.2)\r\n", "Collecting ipie>=0.7.0 (from recirq==0.1.dev0)\r\n", " Using cached ipie-0.7.1-py3-none-any.whl.metadata (4.0 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: numpy>=1.23.5 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (1.26.4)\r\n", "Requirement already satisfied: scipy in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (1.14.1)\r\n", "Collecting openfermionpyscf (from recirq==0.1.dev0)\r\n", " Using cached openfermionpyscf-0.5-py3-none-any.whl.metadata (6.9 kB)\r\n", "Requirement already satisfied: pandas in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (2.2.3)\r\n", "Collecting pfapack (from recirq==0.1.dev0)\r\n", " Using cached pfapack-0.3.1-py3-none-any.whl.metadata (3.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pyscf>=2.1.0 (from recirq==0.1.dev0)\r\n", " Using cached pyscf-2.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.2 kB)\r\n", "Collecting qsim (from recirq==0.1.dev0)\r\n", " Using cached qsim-0.1.0.dev0-py3-none-any.whl.metadata (1.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting qsimcirq>=0.14.0 (from recirq==0.1.dev0)\r\n", " Using cached qsimcirq-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.4 kB)\r\n", "Requirement already satisfied: attrs>=21.3.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cirq-core>=1.2.0->recirq==0.1.dev0) (24.2.0)\r\n", "Collecting duet>=0.2.8 (from cirq-core>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached duet-0.2.9-py3-none-any.whl.metadata (2.3 kB)\r\n", "Requirement already satisfied: matplotlib~=3.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cirq-core>=1.2.0->recirq==0.1.dev0) (3.9.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: networkx>=2.4 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cirq-core>=1.2.0->recirq==0.1.dev0) (3.4.1)\r\n", "Collecting sortedcontainers~=2.0 (from cirq-core>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting sympy (from cirq-core>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached sympy-1.13.3-py3-none-any.whl.metadata (12 kB)\r\n", "Requirement already satisfied: typing-extensions>=4.2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cirq-core>=1.2.0->recirq==0.1.dev0) (4.12.2)\r\n", "Requirement already satisfied: tqdm in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cirq-core>=1.2.0->recirq==0.1.dev0) (4.66.5)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting google-api-core>=1.14.0 (from google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached google_api_core-2.21.0-py3-none-any.whl.metadata (2.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting proto-plus>=1.20.0 (from cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached proto_plus-1.24.0-py3-none-any.whl.metadata (2.2 kB)\r\n", "Requirement already satisfied: protobuf<5.0.0,>=3.15.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cirq-google>=1.2.0->recirq==0.1.dev0) (3.20.3)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: h5py>=3.0.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipie>=0.7.0->recirq==0.1.dev0) (3.12.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pytest (from ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached pytest-8.3.3-py3-none-any.whl.metadata (7.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting numba (from ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached numba-0.60.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.7 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting plum-dispatch (from ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached plum_dispatch-2.5.2-py3-none-any.whl.metadata (7.4 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting deprecation (from openfermion>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached deprecation-2.1.0-py2.py3-none-any.whl.metadata (4.6 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pubchempy (from openfermion>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached PubChemPy-1.0.4-py3-none-any.whl\r\n", "Requirement already satisfied: requests>=2.18 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from openfermion>=1.2.0->recirq==0.1.dev0) (2.32.3)\r\n", "Requirement already satisfied: setuptools in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from pyscf>=2.1.0->recirq==0.1.dev0) (75.2.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pytket>=1.33.0 (from pytket-cirq>=0.16->recirq==0.1.dev0)\r\n", " Using cached pytket-1.33.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (4.3 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pybind11 (from qsimcirq>=0.14.0->recirq==0.1.dev0)\r\n", " Using cached pybind11-2.13.6-py3-none-any.whl.metadata (9.5 kB)\r\n", "Requirement already satisfied: click>=8.0.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from black->recirq==0.1.dev0) (8.1.7)\r\n", "Collecting mypy-extensions>=0.4.3 (from black->recirq==0.1.dev0)\r\n", " Using cached mypy_extensions-1.0.0-py3-none-any.whl.metadata (1.1 kB)\r\n", "Requirement already satisfied: packaging>=22.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from black->recirq==0.1.dev0) (24.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pathspec>=0.9.0 (from black->recirq==0.1.dev0)\r\n", " Using cached pathspec-0.12.1-py3-none-any.whl.metadata (21 kB)\r\n", "Requirement already satisfied: platformdirs>=2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from black->recirq==0.1.dev0) (4.3.6)\r\n", "Requirement already satisfied: tomli>=1.1.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from black->recirq==0.1.dev0) (2.0.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: jupyter in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from fqe->recirq==0.1.dev0) (1.1.1)\r\n", "Collecting pyasn1-modules==0.2.7 (from fqe->recirq==0.1.dev0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Using cached pyasn1_modules-0.2.7-py2.py3-none-any.whl.metadata (1.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting Cython (from fqe->recirq==0.1.dev0)\r\n", " Using cached Cython-3.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.2 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pyasn1<0.5.0,>=0.4.6 (from pyasn1-modules==0.2.7->fqe->recirq==0.1.dev0)\r\n", " Using cached pyasn1-0.4.8-py2.py3-none-any.whl.metadata (1.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting sphinxcontrib-applehelp>=1.0.7 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached sphinxcontrib_applehelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)\r\n", "Collecting sphinxcontrib-devhelp>=1.0.6 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached sphinxcontrib_devhelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting sphinxcontrib-htmlhelp>=2.0.6 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl.metadata (2.3 kB)\r\n", "Collecting sphinxcontrib-jsmath>=1.0.1 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl.metadata (1.4 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting sphinxcontrib-qthelp>=1.0.6 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached sphinxcontrib_qthelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)\r\n", "Collecting sphinxcontrib-serializinghtml>=1.1.9 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl.metadata (2.4 kB)\r\n", "Requirement already satisfied: Jinja2>=3.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from sphinx->recirq==0.1.dev0) (3.1.4)\r\n", "Requirement already satisfied: Pygments>=2.17 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from sphinx->recirq==0.1.dev0) (2.18.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting docutils<0.22,>=0.20 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached docutils-0.21.2-py3-none-any.whl.metadata (2.8 kB)\r\n", "Collecting snowballstemmer>=2.2 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached snowballstemmer-2.2.0-py2.py3-none-any.whl.metadata (6.5 kB)\r\n", "Requirement already satisfied: babel>=2.13 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from sphinx->recirq==0.1.dev0) (2.16.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting alabaster>=0.7.14 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached alabaster-1.0.0-py3-none-any.whl.metadata (2.8 kB)\r\n", "Collecting imagesize>=1.3 (from sphinx->recirq==0.1.dev0)\r\n", " Using cached imagesize-1.4.1-py2.py3-none-any.whl.metadata (1.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: decorator in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (5.1.1)\r\n", "Requirement already satisfied: jedi>=0.16 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (0.19.1)\r\n", "Requirement already satisfied: matplotlib-inline in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (0.1.7)\r\n", "Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (3.0.48)\r\n", "Requirement already satisfied: stack-data in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (0.6.3)\r\n", "Requirement already satisfied: traitlets>=5.13.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (5.14.3)\r\n", "Requirement already satisfied: exceptiongroup in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (1.2.2)\r\n", "Requirement already satisfied: pexpect>4.3 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (4.9.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: python-dateutil>=2.8.2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from pandas->recirq==0.1.dev0) (2.9.0.post0)\r\n", "Requirement already satisfied: pytz>=2020.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from pandas->recirq==0.1.dev0) (2024.2)\r\n", "Requirement already satisfied: tzdata>=2022.7 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from pandas->recirq==0.1.dev0) (2024.2)\r\n", "Requirement already satisfied: threadpoolctl>=3.1.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from scikit-learn->recirq==0.1.dev0) (3.5.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting googleapis-common-protos<2.0.dev0,>=1.56.2 (from google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached googleapis_common_protos-1.65.0-py2.py3-none-any.whl.metadata (1.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting google-auth<3.0.dev0,>=2.14.1 (from google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached google_auth-2.35.0-py2.py3-none-any.whl.metadata (4.7 kB)\r\n", "Requirement already satisfied: grpcio<2.0dev,>=1.33.2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0) (1.67.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting grpcio-status<2.0.dev0,>=1.33.2 (from google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached grpcio_status-1.67.0-py3-none-any.whl.metadata (1.1 kB)\r\n", "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jedi>=0.16->ipython->recirq==0.1.dev0) (0.8.4)\r\n", "Requirement already satisfied: MarkupSafe>=2.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from Jinja2>=3.1->sphinx->recirq==0.1.dev0) (3.0.1)\r\n", "Requirement already satisfied: contourpy>=1.0.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from matplotlib~=3.0->cirq-core>=1.2.0->recirq==0.1.dev0) (1.3.0)\r\n", "Requirement already satisfied: cycler>=0.10 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from matplotlib~=3.0->cirq-core>=1.2.0->recirq==0.1.dev0) (0.12.1)\r\n", "Requirement already satisfied: fonttools>=4.22.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from matplotlib~=3.0->cirq-core>=1.2.0->recirq==0.1.dev0) (4.54.1)\r\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from matplotlib~=3.0->cirq-core>=1.2.0->recirq==0.1.dev0) (1.4.7)\r\n", "Requirement already satisfied: pillow>=8 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from matplotlib~=3.0->cirq-core>=1.2.0->recirq==0.1.dev0) (11.0.0)\r\n", "Requirement already satisfied: pyparsing>=2.3.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from matplotlib~=3.0->cirq-core>=1.2.0->recirq==0.1.dev0) (3.2.0)\r\n", "Requirement already satisfied: ptyprocess>=0.5 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from pexpect>4.3->ipython->recirq==0.1.dev0) (0.7.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: wcwidth in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from prompt-toolkit<3.1.0,>=3.0.41->ipython->recirq==0.1.dev0) (0.2.13)\r\n", "Requirement already satisfied: six>=1.5 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas->recirq==0.1.dev0) (1.16.0)\r\n", "Collecting lark>=1.1.9 (from pytket>=1.33.0->pytket-cirq>=0.16->recirq==0.1.dev0)\r\n", " Using cached lark-1.2.2-py3-none-any.whl.metadata (1.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting graphviz>=0.20.3 (from pytket>=1.33.0->pytket-cirq>=0.16->recirq==0.1.dev0)\r\n", " Using cached graphviz-0.20.3-py3-none-any.whl.metadata (12 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting qwasm>=1.0.1 (from pytket>=1.33.0->pytket-cirq>=0.16->recirq==0.1.dev0)\r\n", " Using cached qwasm-1.0.1-py3-none-any.whl.metadata (299 bytes)\r\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from requests>=2.18->openfermion>=1.2.0->recirq==0.1.dev0) (3.4.0)\r\n", "Requirement already satisfied: idna<4,>=2.5 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from requests>=2.18->openfermion>=1.2.0->recirq==0.1.dev0) (3.10)\r\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from requests>=2.18->openfermion>=1.2.0->recirq==0.1.dev0) (2.2.3)\r\n", "Requirement already satisfied: certifi>=2017.4.17 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from requests>=2.18->openfermion>=1.2.0->recirq==0.1.dev0) (2024.8.30)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting mpmath<1.4,>=1.1.0 (from sympy->cirq-core>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\r\n", "Requirement already satisfied: notebook in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter->fqe->recirq==0.1.dev0) (7.2.2)\r\n", "Requirement already satisfied: jupyter-console in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter->fqe->recirq==0.1.dev0) (6.6.3)\r\n", "Requirement already satisfied: nbconvert in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter->fqe->recirq==0.1.dev0) (7.16.4)\r\n", "Requirement already satisfied: ipykernel in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter->fqe->recirq==0.1.dev0) (6.29.5)\r\n", "Requirement already satisfied: ipywidgets in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter->fqe->recirq==0.1.dev0) (8.1.5)\r\n", "Requirement already satisfied: jupyterlab in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter->fqe->recirq==0.1.dev0) (4.2.5)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting llvmlite<0.44,>=0.43.0dev0 (from numba->ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached llvmlite-0.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting beartype>=0.16.2 (from plum-dispatch->ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached beartype-0.19.0-py3-none-any.whl.metadata (32 kB)\r\n", "Requirement already satisfied: rich>=10.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from plum-dispatch->ipie>=0.7.0->recirq==0.1.dev0) (13.9.2)\r\n", "Collecting iniconfig (from pytest->ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached iniconfig-2.0.0-py3-none-any.whl.metadata (2.6 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pluggy<2,>=1.5 (from pytest->ipie>=0.7.0->recirq==0.1.dev0)\r\n", " Using cached pluggy-1.5.0-py3-none-any.whl.metadata (4.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: executing>=1.2.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from stack-data->ipython->recirq==0.1.dev0) (2.1.0)\r\n", "Requirement already satisfied: asttokens>=2.1.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from stack-data->ipython->recirq==0.1.dev0) (2.4.1)\r\n", "Requirement already satisfied: pure-eval in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from stack-data->ipython->recirq==0.1.dev0) (0.2.3)\r\n", "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0) (5.5.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting rsa<5,>=3.1.4 (from google-auth<3.0.dev0,>=2.14.1->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached rsa-4.9-py3-none-any.whl.metadata (4.2 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO: pip is looking at multiple versions of grpcio-status to determine which version is compatible with other requirements. This could take a while.\r\n", "Collecting grpcio-status<2.0.dev0,>=1.33.2 (from google-api-core[grpc]>=1.14.0->cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached grpcio_status-1.66.2-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.66.1-py3-none-any.whl.metadata (1.1 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Using cached grpcio_status-1.66.0-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.65.5-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.65.4-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.65.2-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.65.1-py3-none-any.whl.metadata (1.1 kB)\r\n", "INFO: pip is still looking at multiple versions of grpcio-status to determine which version is compatible with other requirements. This could take a while.\r\n", " Using cached grpcio_status-1.64.3-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.64.1-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.64.0-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.63.2-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.63.0-py3-none-any.whl.metadata (1.1 kB)\r\n", "INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.\r\n", " Using cached grpcio_status-1.62.3-py3-none-any.whl.metadata (1.3 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting protobuf<5.0.0,>=3.15.0 (from cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl.metadata (541 bytes)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: markdown-it-py>=2.2.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from rich>=10.0->plum-dispatch->ipie>=0.7.0->recirq==0.1.dev0) (3.0.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: comm>=0.1.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (0.2.2)\r\n", "Requirement already satisfied: debugpy>=1.6.5 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (1.8.7)\r\n", "Requirement already satisfied: jupyter-client>=6.1.12 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (8.6.3)\r\n", "Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (5.7.2)\r\n", "Requirement already satisfied: nest-asyncio in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (1.6.0)\r\n", "Requirement already satisfied: psutil in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (6.1.0)\r\n", "Requirement already satisfied: pyzmq>=24 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (26.2.0)\r\n", "Requirement already satisfied: tornado>=6.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipykernel->jupyter->fqe->recirq==0.1.dev0) (6.4.1)\r\n", "Requirement already satisfied: widgetsnbextension~=4.0.12 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipywidgets->jupyter->fqe->recirq==0.1.dev0) (4.0.13)\r\n", "Requirement already satisfied: jupyterlab-widgets~=3.0.12 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipywidgets->jupyter->fqe->recirq==0.1.dev0) (3.0.13)\r\n", "Requirement already satisfied: async-lru>=1.0.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.0.4)\r\n", "Requirement already satisfied: httpx>=0.25.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.27.2)\r\n", "Requirement already satisfied: jupyter-lsp>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.2.5)\r\n", "Requirement already satisfied: jupyter-server<3,>=2.4.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.14.2)\r\n", "Requirement already satisfied: jupyterlab-server<3,>=2.27.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.27.3)\r\n", "Requirement already satisfied: notebook-shim>=0.2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.2.4)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: beautifulsoup4 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (4.12.3)\r\n", "Requirement already satisfied: bleach!=5.0.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (6.1.0)\r\n", "Requirement already satisfied: defusedxml in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (0.7.1)\r\n", "Requirement already satisfied: jupyterlab-pygments in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (0.3.0)\r\n", "Requirement already satisfied: mistune<4,>=2.0.3 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (3.0.2)\r\n", "Requirement already satisfied: nbclient>=0.5.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (0.10.0)\r\n", "Requirement already satisfied: nbformat>=5.7 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (5.10.4)\r\n", "Requirement already satisfied: pandocfilters>=1.4.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (1.5.1)\r\n", "Requirement already satisfied: tinycss2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbconvert->jupyter->fqe->recirq==0.1.dev0) (1.3.0)\r\n", "Requirement already satisfied: webencodings in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from bleach!=5.0.0->nbconvert->jupyter->fqe->recirq==0.1.dev0) (0.5.1)\r\n", "Requirement already satisfied: anyio in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from httpx>=0.25.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (4.6.2.post1)\r\n", "Requirement already satisfied: httpcore==1.* in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from httpx>=0.25.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.0.6)\r\n", "Requirement already satisfied: sniffio in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from httpx>=0.25.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.3.1)\r\n", "Requirement already satisfied: h11<0.15,>=0.13 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from httpcore==1.*->httpx>=0.25.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.14.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: argon2-cffi>=21.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (23.1.0)\r\n", "Requirement already satisfied: jupyter-events>=0.9.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.10.0)\r\n", "Requirement already satisfied: jupyter-server-terminals>=0.4.4 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.5.3)\r\n", "Requirement already satisfied: overrides>=5.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (7.7.0)\r\n", "Requirement already satisfied: prometheus-client>=0.9 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.21.0)\r\n", "Requirement already satisfied: send2trash>=1.8.2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.8.3)\r\n", "Requirement already satisfied: terminado>=0.8.3 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.18.1)\r\n", "Requirement already satisfied: websocket-client>=1.7 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.8.0)\r\n", "Requirement already satisfied: json5>=0.9.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.9.25)\r\n", "Requirement already satisfied: jsonschema>=4.18.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (4.23.0)\r\n", "Requirement already satisfied: mdurl~=0.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich>=10.0->plum-dispatch->ipie>=0.7.0->recirq==0.1.dev0) (0.1.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: fastjsonschema>=2.15 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from nbformat>=5.7->nbconvert->jupyter->fqe->recirq==0.1.dev0) (2.20.0)\r\n", "Requirement already satisfied: soupsieve>1.2 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from beautifulsoup4->nbconvert->jupyter->fqe->recirq==0.1.dev0) (2.6)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: argon2-cffi-bindings in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (21.2.0)\r\n", "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2024.10.1)\r\n", "Requirement already satisfied: referencing>=0.28.4 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.35.1)\r\n", "Requirement already satisfied: rpds-py>=0.7.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.20.0)\r\n", "Requirement already satisfied: python-json-logger>=2.0.4 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.0.7)\r\n", "Requirement already satisfied: pyyaml>=5.3 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (6.0.2)\r\n", "Requirement already satisfied: rfc3339-validator in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.1.4)\r\n", "Requirement already satisfied: rfc3986-validator>=0.1.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (0.1.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: fqdn in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.5.1)\r\n", "Requirement already satisfied: isoduration in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (20.11.0)\r\n", "Requirement already satisfied: jsonpointer>1.13 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (3.0.0)\r\n", "Requirement already satisfied: uri-template in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.3.0)\r\n", "Requirement already satisfied: webcolors>=24.6.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (24.8.0)\r\n", "Requirement already satisfied: cffi>=1.0.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.17.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: pycparser in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.22)\r\n", "Requirement already satisfied: arrow>=0.15.0 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.3.0)\r\n", "Requirement already satisfied: types-python-dateutil>=2.8.10 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (2.9.0.20241003)\r\n", "Using cached cirq_core-1.4.1-py3-none-any.whl (1.9 MB)\r\n", "Using cached cirq_google-1.4.1-py3-none-any.whl (532 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached ipie-0.7.1-py3-none-any.whl (528 kB)\r\n", "Using cached openfermion-1.6.1-py3-none-any.whl (1.2 MB)\r\n", "Using cached pyscf-2.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.7 MB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached pytket_cirq-0.38.0-py3-none-any.whl (17 kB)\r\n", "Using cached qsimcirq-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\r\n", "Using cached black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.8 MB)\r\n", "Using cached filelock-3.16.1-py3-none-any.whl (16 kB)\r\n", "Using cached pyasn1_modules-0.2.7-py2.py3-none-any.whl (131 kB)\r\n", "Using cached sphinx-8.1.3-py3-none-any.whl (3.5 MB)\r\n", "Using cached openfermionpyscf-0.5-py3-none-any.whl (16 kB)\r\n", "Using cached pfapack-0.3.1-py3-none-any.whl (12 kB)\r\n", "Using cached Py_BOBYQA-1.5.0-py3-none-any.whl (57 kB)\r\n", "Using cached qsim-0.1.0.dev0-py3-none-any.whl (4.5 kB)\r\n", "Using cached alabaster-1.0.0-py3-none-any.whl (13 kB)\r\n", "Using cached docutils-0.21.2-py3-none-any.whl (587 kB)\r\n", "Using cached duet-0.2.9-py3-none-any.whl (29 kB)\r\n", "Using cached google_api_core-2.21.0-py3-none-any.whl (156 kB)\r\n", "Using cached imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB)\r\n", "Using cached mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\r\n", "Using cached pathspec-0.12.1-py3-none-any.whl (31 kB)\r\n", "Using cached proto_plus-1.24.0-py3-none-any.whl (50 kB)\r\n", "Using cached pytket-1.33.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (8.0 MB)\r\n", "Using cached snowballstemmer-2.2.0-py2.py3-none-any.whl (93 kB)\r\n", "Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)\r\n", "Using cached sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB)\r\n", "Using cached sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB)\r\n", "Using cached sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB)\r\n", "Using cached sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB)\r\n", "Using cached sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB)\r\n", "Using cached sympy-1.13.3-py3-none-any.whl (6.2 MB)\r\n", "Using cached Cython-3.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB)\r\n", "Using cached deprecation-2.1.0-py2.py3-none-any.whl (11 kB)\r\n", "Using cached numba-0.60.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (3.7 MB)\r\n", "Using cached plum_dispatch-2.5.2-py3-none-any.whl (42 kB)\r\n", "Using cached pybind11-2.13.6-py3-none-any.whl (243 kB)\r\n", "Using cached pytest-8.3.3-py3-none-any.whl (342 kB)\r\n", "Using cached beartype-0.19.0-py3-none-any.whl (1.0 MB)\r\n", "Using cached google_auth-2.35.0-py2.py3-none-any.whl (208 kB)\r\n", "Using cached googleapis_common_protos-1.65.0-py2.py3-none-any.whl (220 kB)\r\n", "Using cached graphviz-0.20.3-py3-none-any.whl (47 kB)\r\n", "Using cached grpcio_status-1.62.3-py3-none-any.whl (14 kB)\r\n", "Using cached protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl (294 kB)\r\n", "Using cached lark-1.2.2-py3-none-any.whl (111 kB)\r\n", "Using cached llvmlite-0.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.9 MB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached mpmath-1.3.0-py3-none-any.whl (536 kB)\r\n", "Using cached pluggy-1.5.0-py3-none-any.whl (20 kB)\r\n", "Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\r\n", "Using cached qwasm-1.0.1-py3-none-any.whl (15 kB)\r\n", "Using cached iniconfig-2.0.0-py3-none-any.whl (5.9 kB)\r\n", "Using cached rsa-4.9-py3-none-any.whl (34 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Building wheels for collected packages: recirq\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Building wheel for recirq (setup.py) ... \u001b[?25l-" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b \b\\" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b \b|" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b \b/" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b \b-" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b \bdone\r\n", "\u001b[?25h Created wheel for recirq: filename=recirq-0.1.dev0-py3-none-any.whl size=1282052 sha256=1359d74b092bc837535f9f123edc42e5146ed64ba717bccfd8e1b52554216a81\r\n", " Stored in directory: /tmpfs/tmp/pip-ephem-wheel-cache-2tngwnr_/wheels/ce/5f/69/39665718f7e827ef4b0d4478917e63f4b3e7035a2c27c08b20\r\n", "Successfully built recirq\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Installing collected packages: sortedcontainers, snowballstemmer, pyasn1, pubchempy, mpmath, sympy, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, rsa, qwasm, qsim, pybind11, pyasn1-modules, protobuf, pluggy, pathspec, mypy-extensions, llvmlite, lark, iniconfig, imagesize, graphviz, filelock, duet, docutils, deprecation, Cython, beartype, alabaster, sphinx, pytket, pytest, pyscf, proto-plus, pfapack, numba, googleapis-common-protos, google-auth, black, Py-BOBYQA, plum-dispatch, grpcio-status, google-api-core, cirq-core, qsimcirq, openfermion, ipie, openfermionpyscf, cirq-google, pytket-cirq, fqe, recirq\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: protobuf\r\n", " Found existing installation: protobuf 3.20.3\r\n", " Uninstalling protobuf-3.20.3:\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Successfully uninstalled protobuf-3.20.3\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\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.\r\n", "tensorflow-metadata 1.16.1 requires protobuf<4.21,>=3.20.3; python_version < \"3.11\", but you have protobuf 4.25.5 which is incompatible.\u001b[0m\u001b[31m\r\n", "\u001b[0mSuccessfully installed Cython-3.0.11 Py-BOBYQA-1.5.0 alabaster-1.0.0 beartype-0.19.0 black-24.10.0 cirq-core-1.4.1 cirq-google-1.4.1 deprecation-2.1.0 docutils-0.21.2 duet-0.2.9 filelock-3.16.1 fqe-0.3.0 google-api-core-2.21.0 google-auth-2.35.0 googleapis-common-protos-1.65.0 graphviz-0.20.3 grpcio-status-1.62.3 imagesize-1.4.1 iniconfig-2.0.0 ipie-0.7.1 lark-1.2.2 llvmlite-0.43.0 mpmath-1.3.0 mypy-extensions-1.0.0 numba-0.60.0 openfermion-1.6.1 openfermionpyscf-0.5 pathspec-0.12.1 pfapack-0.3.1 pluggy-1.5.0 plum-dispatch-2.5.2 proto-plus-1.24.0 protobuf-4.25.5 pubchempy-1.0.4 pyasn1-0.4.8 pyasn1-modules-0.2.7 pybind11-2.13.6 pyscf-2.7.0 pytest-8.3.3 pytket-1.33.1 pytket-cirq-0.38.0 qsim-0.1.0.dev0 qsimcirq-0.21.0 qwasm-1.0.1 recirq-0.1.dev0 rsa-4.9 snowballstemmer-2.2.0 sortedcontainers-2.4.0 sphinx-8.1.3 sphinxcontrib-applehelp-2.0.0 sphinxcontrib-devhelp-2.0.0 sphinxcontrib-htmlhelp-2.1.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-2.0.0 sphinxcontrib-serializinghtml-2.0.0 sympy-1.13.3\r\n" ] } ], "source": [ "try:\n", " import recirq\n", "except ImportError:\n", " !pip install git+https://github.com/quantumlib/ReCirq" ] }, { "cell_type": "markdown", "metadata": { "id": "H9heQyxwKkGG" }, "source": [ "Now import Cirq, ReCirq and the module dependencies:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:16.445780Z", "iopub.status.busy": "2024-10-18T09:31:16.445157Z", "iopub.status.idle": "2024-10-18T09:31:19.111228Z", "shell.execute_reply": "2024-10-18T09:31:19.110485Z" }, "id": "kVH-4o_bKoH_" }, "outputs": [], "source": [ "import cirq\n", "import recirq\n", "\n", "import networkx as nx\n", "import numpy as np\n", "from cirq.contrib.svg import SVGCircuit, circuit_to_svg\n", "\n", "from recirq.qaoa.classical_angle_optimization import OptimizationResult\n", "from recirq.qaoa.problems import get_all_hardware_grid_problems" ] }, { "cell_type": "markdown", "metadata": { "id": "_BlXR0TaKtZO" }, "source": [ "Set the theme colors:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:19.115244Z", "iopub.status.busy": "2024-10-18T09:31:19.114520Z", "iopub.status.idle": "2024-10-18T09:31:19.118110Z", "shell.execute_reply": "2024-10-18T09:31:19.117512Z" }, "id": "gpkMGhaDIfBY" }, "outputs": [], "source": [ "QBLUE = '#1967d2'\n", "QRED = '#ea4335ff'\n", "QGOLD = '#fbbc05ff'" ] }, { "cell_type": "markdown", "metadata": { "id": "vaaEu_xiLCav" }, "source": [ "## Create a grid" ] }, { "cell_type": "markdown", "metadata": { "id": "LwpereqKIfBe" }, "source": [ "Here, we'll generate a 3x3 grid with arbitrarily chosen (fake!) beta, gamma parameters. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:19.121115Z", "iopub.status.busy": "2024-10-18T09:31:19.120563Z", "iopub.status.idle": "2024-10-18T09:31:19.288550Z", "shell.execute_reply": "2024-10-18T09:31:19.287605Z" }, "id": "Von9l7KmIfBf" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fake_device_graph = nx.grid_2d_graph(3, 3)\n", "fake_device_graph = nx.relabel_nodes(\n", " fake_device_graph, mapping={(r, c): cirq.GridQubit(r, c)\n", " for r, c in fake_device_graph.nodes})\n", "\n", "problems = get_all_hardware_grid_problems(fake_device_graph, central_qubit=cirq.GridQubit(1, 1),\n", " n_instances=10, rs=np.random.RandomState(52))\n", "n_qubits = 9\n", "instance_i = 0\n", "problem = problems[n_qubits, instance_i]\n", "\n", "optimum = OptimizationResult(p=1, f_val=None, gammas=[0.123], betas=[0.456], min_c=None, max_c=None)\n", "nx.draw_networkx(problem.graph, \n", " pos={i: problem.coordinates[i] for i in range(problem.graph.number_of_nodes())},\n", " node_color=QBLUE)" ] }, { "cell_type": "markdown", "metadata": { "id": "xEgQ3mcrIfBj" }, "source": [ "If, however, you've been following along, we can load in the results of `HardwareGridProblemGenerationTask`s for which we've actually pre-computed the optimal angles. TODO: enable." ] }, { "cell_type": "markdown", "metadata": { "id": "cQlwHhzLIfBk" }, "source": [ "```\n", "from recirq.qaoa.experiments.problem_generation_tasks import HardwareGridProblemGenerationTask\n", "from recirq.qaoa.experiments.angle_precomputation_tasks import AnglePrecomputationTask\n", "\n", "gen_task = HardwareGridProblemGenerationTask(\n", " dataset_id = '2020-03-19',\n", " device_name = 'Sycamore23',\n", " instance_i = 0,\n", " n_qubits = 5,\n", ")\n", "\n", "pre_task = AnglePrecomputationTask(\n", " dataset_id = '2020-03-23',\n", " generation_task = gen_task,\n", " p = 1,\n", ")\n", "print(gen_task)\n", "print(pre_task)\n", "```" ] }, { "cell_type": "markdown", "metadata": { "id": "ZuiLBEqgIfBl" }, "source": [ "```\n", "from recirq.qaoa.experiments.problem_generation_tasks import DEFAULT_BASE_DIR as PGEN_BASE_DIR\n", "from recirq.qaoa.experiments.angle_precomputation_tasks import DEFAULT_BASE_DIR as APRE_BASE_DIR\n", "\n", "gen_data = recirq.load(gen_task, base_dir=PGEN_BASE_DIR)\n", "pre_data = recirq.load(pre_task, base_dir=APRE_BASE_DIR)\n", "problem = gen_data['problem']\n", "optimum = pre_data['optimum']\n", "print(optimum)\n", "nx.draw_networkx(problem.graph, \n", " pos={i: problem.coordinates[i] for i in range(problem.graph.number_of_nodes())},\n", " node_color=QBLUE\n", " )\n", "```" ] }, { "cell_type": "markdown", "metadata": { "id": "KuvSKzhdIfBm" }, "source": [ "## Ansatz\n", "\n", "As always, the circuit ansatz involves $|+\\rangle$ initialization followed by alternating applications of the problem and driver unitaries. We first construct a highly abstracted circuit with these multi-qubit operations." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:19.292200Z", "iopub.status.busy": "2024-10-18T09:31:19.291884Z", "iopub.status.idle": "2024-10-18T09:31:19.508887Z", "shell.execute_reply": "2024-10-18T09:31:19.508163Z" }, "id": "9lQgwJfpIfBn" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: HHHHHHHHHproblemg=0.123#3#4#5#6#7#8#9driverb=0.456#3#4#5#6#7#8#9" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import ProblemUnitary, DriverUnitary\n", "qubits = cirq.LineQubit.range(problem.graph.number_of_nodes())\n", "\n", "circuit = cirq.Circuit(\n", " cirq.H.on_each(qubits),\n", " ProblemUnitary(problem.graph, gamma=optimum.gammas[0]).on(*qubits),\n", " DriverUnitary(len(qubits), beta=optimum.betas[0]).on(*qubits)\n", ")\n", "SVGCircuit(circuit)" ] }, { "cell_type": "markdown", "metadata": { "id": "HrL9lTEaIfBr" }, "source": [ "## Hardware topology\n", "\n", "We can enact the problem unitary with four entangling layers per p-step. \n", "\n", " 1. Horizontal links from even columns\n", " 2. Horizontal links from odd columns\n", " 3. Vertical links from even rows\n", " 4. Vertical links from odd rows\n", " \n", "To help the algorithm, we must specify `coordinates` to the compilation routine. This maps from bit indices $\\in \\{0, 1, \\dots n\\}$ to `(row, column)` coordinates so the compilation routine can categorize the various links into the above four categories. This is a little roundabout since we'll be mapping to `GridQubit`s, but I'm trying to emphasize the distinction between the problem (which is not related to quantum computing) and the implementation (which is).\n", " \n", "As always, the driver unitary is nothing more than single-qubit X rotations." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:19.512116Z", "iopub.status.busy": "2024-10-18T09:31:19.511847Z", "iopub.status.idle": "2024-10-18T09:31:19.924768Z", "shell.execute_reply": "2024-10-18T09:31:19.924065Z" }, "id": "98OkZWSiIfBs" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: HHHHHHHHHZZZZ^0.078ZZZZ^-0.078ZZZZ^-0.078ZZZZ^-0.078ZZZZ^0.078ZZZZ^0.078ZZZZ^-0.078ZZZZ^0.078ZZZZ^-0.078ZZZZ^0.078ZZZZ^-0.078ZZZZ^0.078X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import compile_problem_unitary_to_hardware_graph, \\\n", " compile_driver_unitary_to_rx\n", "circuit = compile_problem_unitary_to_hardware_graph(circuit, problem.coordinates)\n", "circuit = compile_driver_unitary_to_rx(circuit)\n", "SVGCircuit(circuit)" ] }, { "cell_type": "markdown", "metadata": { "id": "0XCHWxQwIfBw" }, "source": [ "## Compilation\n", "\n", "To compile $e^{i \\gamma w_{ij} Z_i Z_j}$, express the `ZZ` interaction as three rounds of `SYC` gates. We take a brief aside to look at this compilation." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:19.928298Z", "iopub.status.busy": "2024-10-18T09:31:19.927649Z", "iopub.status.idle": "2024-10-18T09:31:19.954323Z", "shell.execute_reply": "2024-10-18T09:31:19.953645Z" }, "id": "RDDbNl50IfBx" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: ZZZZ^0.22" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "zz = cirq.Circuit(cirq.ZZ(*qubits[:2])**(2*0.345/np.pi))\n", "SVGCircuit(zz)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:19.957069Z", "iopub.status.busy": "2024-10-18T09:31:19.956812Z", "iopub.status.idle": "2024-10-18T09:31:20.223240Z", "shell.execute_reply": "2024-10-18T09:31:20.222559Z" }, "id": "2QvEh_uFIfB0" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: PhX(-0.5)^0.232PhX(0.414)^(0)Z^(-5/12)Z^(-1/12)SYCSYCPhX(0)^0.145Z^0SYCSYCPhX(0.917)^0.232PhX(0.121)^(0)Z^(-5/12)Z^-0.75" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import compile_to_syc\n", "zz = compile_to_syc(zz)\n", "SVGCircuit(zz)" ] }, { "cell_type": "markdown", "metadata": { "id": "xkudCJcDIfB4" }, "source": [ "### Function `zz_as_syc` is included for convenience" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:20.226359Z", "iopub.status.busy": "2024-10-18T09:31:20.225807Z", "iopub.status.idle": "2024-10-18T09:31:20.483818Z", "shell.execute_reply": "2024-10-18T09:31:20.483075Z" }, "id": "Fjl17Tq_IfB4" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: PhX(-0.5)^0.232PhX(0.414)^(0)Z^(-5/12)Z^(-1/12)SYCSYCPhX(0)^0.145Z^0SYCSYCPhX(0.917)^0.232PhX(0.121)^(0)Z^(-5/12)Z^-0.75" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import zz_as_syc\n", "zz = zz_as_syc(0.345, *qubits[:2])\n", "SVGCircuit(zz)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:20.486793Z", "iopub.status.busy": "2024-10-18T09:31:20.486525Z", "iopub.status.idle": "2024-10-18T09:31:20.511262Z", "shell.execute_reply": "2024-10-18T09:31:20.510543Z" }, "id": "4wYev76RIfB7" }, "outputs": [], "source": [ "cirq.testing.assert_allclose_up_to_global_phase(\n", " cirq.Circuit(cirq.ZZ(*qubits[:2])**(2*0.345/np.pi)).unitary(),\n", " zz_as_syc(0.345, *qubits[:2]).unitary(),\n", " atol=1e-8\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:20.514568Z", "iopub.status.busy": "2024-10-18T09:31:20.514304Z", "iopub.status.idle": "2024-10-18T09:31:20.533451Z", "shell.execute_reply": "2024-10-18T09:31:20.532797Z" }, "id": "xvunS9GlIfB_" }, "outputs": [], "source": [ "cirq.testing.assert_allclose_up_to_global_phase(\n", " compile_to_syc(cirq.Circuit(cirq.ZZ(*qubits[:2])**(2*0.345/np.pi))).unitary(),\n", " zz_as_syc(0.345, *qubits[:2]).unitary(),\n", " atol=1e-8\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "rapp3N1IIfCB" }, "source": [ "### Structure the gates\n", "\n", "Make sure all the gates are well-structured. This means each layer is composed of homogeneous operations which are native to the device." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:20.536376Z", "iopub.status.busy": "2024-10-18T09:31:20.536120Z", "iopub.status.idle": "2024-10-18T09:31:20.541340Z", "shell.execute_reply": "2024-10-18T09:31:20.540698Z" }, "id": "Ya-8Lq1EIfCC" }, "outputs": [ { "data": { "text/plain": [ "HomogeneousCircuitStats(num_phx=3, num_z=3, num_syc=2, has_permutation=False, has_measurement=False)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.circuit_structure import validate_well_structured\n", "_, stats = validate_well_structured(zz)\n", "stats" ] }, { "cell_type": "markdown", "metadata": { "id": "fV0OaST0IfCG" }, "source": [ "## Compiling to native operations\n", "\n", "We use the above compilation of `ZZ` to compile our circuit to native operations. Because our compilation produces well-structured gates and our starting circuit was structured, the resulting circuit is well-structured." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:20.544282Z", "iopub.status.busy": "2024-10-18T09:31:20.543877Z", "iopub.status.idle": "2024-10-18T09:31:23.187582Z", "shell.execute_reply": "2024-10-18T09:31:23.186862Z" }, "id": "WmPRXvXbIfCH" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: PhX(0.0149)^0.25PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5Z^-0.421Z^(2/3)Z^(-1/3)Z^0.609Z^(-1/3)Z^(2/3)Z^0.609Z^(-1/3)Z^(2/3)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(-0.573)^0.5PhX(0.25)^0.489PhX(0.917)^0.489PhX(-0.25)^0.511PhX(0.917)^0.489PhX(-0.25)^0.511Z^(1/6)Z^(5/6)SZ^(1/3)S^-1Z^(1/3)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(-0.573)^0.5PhX(-0.75)^0.489PhX(-0.0833)^0.511PhX(0.783)^(0)PhX(-0.0833)^0.511PhX(0.783)^(0)Z^(1/6)Z^(-1/6)ZZ^(-5/6)Z^0Z^(1/6)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(0.676)^0.303PhX(-0.25)^0.511PhX(0.148)^0.319PhX(0.25)^0.489PhX(0.676)^0.303PhX(-0.25)^0.511Z^-0.01Z^(1/3)Z^-0.831Z^(5/6)Z^-0.01Z^(1/3)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(0.148)^0.319PhX(-0.5)^0.29PhX(0.676)^0.303PhX(0.5)^0.29PhX(0.148)^0.319PhX(-0.5)^0.29Z^-0.831SZ^-0.01S^-1Z^-0.831S" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import compile_to_syc\n", "circuit = compile_to_syc(circuit)\n", "SVGCircuit(circuit)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:23.190911Z", "iopub.status.busy": "2024-10-18T09:31:23.190656Z", "iopub.status.idle": "2024-10-18T09:31:23.196149Z", "shell.execute_reply": "2024-10-18T09:31:23.195456Z" }, "id": "e5S5y1qnIfCK" }, "outputs": [ { "data": { "text/plain": [ "HomogeneousCircuitStats(num_phx=9, num_z=9, num_syc=8, has_permutation=False, has_measurement=False)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_, stats = validate_well_structured(circuit)\n", "stats" ] }, { "cell_type": "markdown", "metadata": { "id": "zVOUhlpOIfCN" }, "source": [ "## Append measurement" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:23.198973Z", "iopub.status.busy": "2024-10-18T09:31:23.198743Z", "iopub.status.idle": "2024-10-18T09:31:25.761361Z", "shell.execute_reply": "2024-10-18T09:31:25.760522Z" }, "id": "xrGIYwGSIfCO" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: PhX(0.0149)^0.25PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5Z^-0.421Z^(2/3)Z^(-1/3)Z^0.609Z^(-1/3)Z^(2/3)Z^0.609Z^(-1/3)Z^(2/3)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(-0.573)^0.5PhX(0.25)^0.489PhX(0.917)^0.489PhX(-0.25)^0.511PhX(0.917)^0.489PhX(-0.25)^0.511Z^(1/6)Z^(5/6)SZ^(1/3)S^-1Z^(1/3)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(-0.573)^0.5PhX(-0.75)^0.489PhX(-0.0833)^0.511PhX(0.783)^(0)PhX(-0.0833)^0.511PhX(0.783)^(0)Z^(1/6)Z^(-1/6)ZZ^(-5/6)Z^0Z^(1/6)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(0.676)^0.303PhX(-0.25)^0.511PhX(0.148)^0.319PhX(0.25)^0.489PhX(0.676)^0.303PhX(-0.25)^0.511Z^-0.01Z^(1/3)Z^-0.831Z^(5/6)Z^-0.01Z^(1/3)SYCSYCSYCSYCSYCSYCPhX(0)^0.919PhX(0)^0.919PhX(0)^0.919Z^0Z^0Z^0SYCSYCSYCSYCSYCSYCPhX(0.148)^0.319PhX(-0.5)^0.29PhX(0.676)^0.303PhX(0.5)^0.29PhX(0.148)^0.319PhX(-0.5)^0.29Z^-0.831SZ^-0.01S^-1Z^-0.831SM('z')MMMMMMMM" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mcircuit = circuit + cirq.measure(*qubits, key='z')\n", "SVGCircuit(mcircuit)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:25.764693Z", "iopub.status.busy": "2024-10-18T09:31:25.764217Z", "iopub.status.idle": "2024-10-18T09:31:25.770029Z", "shell.execute_reply": "2024-10-18T09:31:25.769393Z" }, "id": "PTr54AsaIfCR" }, "outputs": [ { "data": { "text/plain": [ "HomogeneousCircuitStats(num_phx=9, num_z=9, num_syc=8, has_permutation=False, has_measurement=True)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_, stats = validate_well_structured(mcircuit)\n", "stats" ] }, { "cell_type": "markdown", "metadata": { "id": "s7YGb2OVIfCU" }, "source": [ "## Compile out Z's\n", "Z gates commute through SYC so we can remove them. This step is not necessary: the quantum operating system will track the virtual Zs if we don't remove them." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:25.772753Z", "iopub.status.busy": "2024-10-18T09:31:25.772508Z", "iopub.status.idle": "2024-10-18T09:31:28.083247Z", "shell.execute_reply": "2024-10-18T09:31:28.082516Z" }, "id": "rMcZ3yOmIfCV" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: PhX(0.0149)^0.25PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5SYCSYCSYCSYCSYCSYCPhX(0.421)^0.919PhX(-0.609)^0.919PhX(-0.609)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.152)^0.5PhX(-0.417)^0.489PhX(0.308)^0.489PhX(0.0833)^0.511PhX(0.308)^0.489PhX(0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.5)^0.919PhX(-4.44e-16)^0.919PhX(-4.44e-16)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.0728)^0.5PhX(-0.417)^0.489PhX(-0.0833)^0.511PhX(0.116)^(0)PhX(-0.0833)^0.511PhX(0.116)^(0)SYCSYCSYCSYCSYCSYCPhX(0.254)^0.919PhX(0.333)^0.919PhX(0.5)^0.919SYCSYCSYCSYCSYCSYCPhX(0.93)^0.303PhX(0.641)^0.511PhX(0.481)^0.319PhX(-0.75)^0.489PhX(-0.824)^0.303PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.558)^0.919PhX(0.167)^0.919PhX(-0.167)^0.919SYCSYCSYCSYCSYCSYCPhX(0.706)^0.319PhX(-0.609)^0.29PhX(0.843)^0.303PhX(0.5)^0.29PhX(-0.019)^0.319PhX(0.667)^0.29M('z')MMMMMMMM" ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import compile_out_virtual_z\n", "mcircuit = compile_out_virtual_z(mcircuit)\n", "SVGCircuit(mcircuit)" ] }, { "cell_type": "markdown", "metadata": { "id": "AdKNvgbhIfCZ" }, "source": [ "## Compile out negligible gates\n", "\n", "We've left several `PhX^0` to keep our circuits structured. As the very last compilation step, we can drop these." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:28.086599Z", "iopub.status.busy": "2024-10-18T09:31:28.086322Z", "iopub.status.idle": "2024-10-18T09:31:30.336927Z", "shell.execute_reply": "2024-10-18T09:31:30.336203Z" }, "id": "ejJTtjj9IfCZ" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: PhX(0.0149)^0.25PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5SYCSYCSYCSYCSYCSYCPhX(0.421)^0.919PhX(-0.609)^0.919PhX(-0.609)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.152)^0.5PhX(-0.417)^0.489PhX(0.308)^0.489PhX(0.0833)^0.511PhX(0.308)^0.489PhX(0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.5)^0.919PhX(-4.44e-16)^0.919PhX(-4.44e-16)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.0728)^0.5PhX(-0.417)^0.489PhX(-0.0833)^0.511PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.254)^0.919PhX(0.333)^0.919PhX(0.5)^0.919SYCSYCSYCSYCSYCSYCPhX(0.93)^0.303PhX(0.641)^0.511PhX(0.481)^0.319PhX(-0.75)^0.489PhX(-0.824)^0.303PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.558)^0.919PhX(0.167)^0.919PhX(-0.167)^0.919SYCSYCSYCSYCSYCSYCPhX(0.706)^0.319PhX(-0.609)^0.29PhX(0.843)^0.303PhX(0.5)^0.29PhX(-0.019)^0.319PhX(0.667)^0.29M('z')MMMMMMMM" ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.gates_and_compilation import compile_to_non_negligible\n", "mcircuit = compile_to_non_negligible(mcircuit)\n", "SVGCircuit(mcircuit)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:30.340421Z", "iopub.status.busy": "2024-10-18T09:31:30.339784Z", "iopub.status.idle": "2024-10-18T09:31:30.344885Z", "shell.execute_reply": "2024-10-18T09:31:30.344264Z" }, "id": "bFz9dhyfIfCc" }, "outputs": [ { "data": { "text/plain": [ "HomogeneousCircuitStats(num_phx=9, num_z=0, num_syc=8, has_permutation=False, has_measurement=True)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_, stats = validate_well_structured(mcircuit)\n", "stats" ] }, { "cell_type": "markdown", "metadata": { "id": "PRR0w98_IfCf" }, "source": [ "## Place on device\n", "\n", " - Our problem has integer nodes because it should be specified independently of a quantum implementation\n", " - Our circuit has LineQubit qubits to emphasize the fact that we can place this circuit in multiple locations on a device\n", " - Our `coordinates` list was used only as a helper for the compilation\n", " \n", "We now place the compiled circuit onto a compatible part of the device. Here, we use networkx's subgraph isomorphism routine to find all the possibilities." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:30.347859Z", "iopub.status.busy": "2024-10-18T09:31:30.347431Z", "iopub.status.idle": "2024-10-18T09:31:30.520911Z", "shell.execute_reply": "2024-10-18T09:31:30.520229Z" }, "id": "5p5qjKgAIfCg" }, "outputs": [ { "data": { "image/png": "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Tk5O0/N79uxh48aNbu0nTJjA9u0NP0JkMIcScOrbeXG9+10GPywu4+vKGv4j2rt7ZEyNi8LuhD+98rem5+rq6lizZg2XXXaZy5UEAFlZWRgMBiZMmOBVfyIinU1XE0i3sWTJEt577z2uuOIK7r77bmw2G6tWrWLYsGHs3LnTpW16ejqvvPIK+/fvZ9CgQQSPuxzLO2/yw+07GREeysURvYgwGtlZWcNrBcUkBQdxX6rr4fw5uw/zesFJtk8cST9z61cZjImO5IZLRvLwww9TVFTEwIED+ctf/sLRo0d58cUX3dp/8MEHXH755fTp06djghEROc90ZEC6jZEjR7Jx40ZiY2NZuHAhL730EkuWLOGGG25wazt16lRiYmJ44403AAiZOh0cdqbFR3O4po6VRwt4ZH8O/1dSzi2JMWwcO5S4YNfTBNU2B+aAgHPfpthu56+vvc7cuXN55ZVXuPfee7Farfzzn//kyiuvdGlaXl7O+++/z2233dauLEREOpNuRyzd3uLFi1myZAlnbqpLly5lzZo1HDhwAKPRSNlDc7Du2N7wM8RtMPTTr7gxIYbFF6a03shoxDTqUno/uapN61yxYgW//e1vOXTokNtVBiIinU23I5Ye7/7776eqqoq1a9cCED53PhjbduZrb5WFWoeDOf37nr2hMbBhvW1gtVpZvnw5CxYsUCEgIj5FcwbEZ4WFhVFUVNT02JiQRNg9v6Jq+ePnfO3gMDOHJ405dx9zHsCYkNSm8ZhMJpfJjyIivkJHBqRHMV8/jdDbf9Eh6wq94y7M16V3yLpERLozzRmQHsmyIZOq1U+D3dbmOQQAGI1gDCRszgMqBETE52nOgPg18/XTiH5xLaZRlzY8YTzHFQOnlptGXUr0i2tVCIiIX9GcAemxjAlJ9H5yFbZjh6ldv466bVtdftSogYGAxCSCx00kZOoMAvtf0FXDFRHpMioGpMcL7D+AsHseIAxwWmqw532H01qPwRSEMSnZ5WeJRUT8kYoB8SsGcyiBAwd19TBERLoVzRkQERHxcyoGRERE/JyKARERET+nYkBERMTPqRgQERHxcyoGRERE/JyKARERET+nYkBERMTPqRgQERHxcyoGRERE/JyKARERET+nYkBERMTPqRgQERHxcyoGRERE/JyKARERET+nYkBERMTPBbalkdPpBKCiouK8DkZEREQ6TuPnduPneGvaVAxUVlYCkJKS0s5hiYiISGerrKwkMjKy1eUG57nKBcDhcJCfn094eDgGg6FDBygiIiLnh9PppLKyksTERAICWp8Z0KZiQERERHouTSAUERHxcyoGRERE/JyKARERET+nYkBERMTPqRgQERHxcyoGRERE/JyKARERET/3/wEXjazziSMTMAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from cirq.contrib.routing import gridqubits_to_graph_device\n", "device_graph = gridqubits_to_graph_device(recirq.get_device_obj_by_name('Sycamore23').metadata.qubit_set)\n", "nx.draw_networkx(device_graph, pos={q: (q.row, q.col) for q in device_graph.nodes}, node_color=QRED)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:30.524014Z", "iopub.status.busy": "2024-10-18T09:31:30.523407Z", "iopub.status.idle": "2024-10-18T09:31:30.940512Z", "shell.execute_reply": "2024-10-18T09:31:30.939528Z" }, "id": "pxRXrpCvIfCp" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "device_graph = gridqubits_to_graph_device(recirq.get_device_obj_by_name('Sycamore23').metadata.qubit_set)\n", "matcher = nx.algorithms.isomorphism.GraphMatcher(device_graph, problem.graph)\n", "\n", "# There's a \"rotational\" freedom which we remove here:\n", "each_set_of_qubits_only_one_subgraph = {}\n", "for q_to_i in matcher.subgraph_isomorphisms_iter():\n", " each_set_of_qubits_only_one_subgraph[frozenset(q_to_i.keys())] = q_to_i\n", "\n", "for q_to_i in each_set_of_qubits_only_one_subgraph.values():\n", " nx.draw_networkx(device_graph, pos={q: (q.row, q.col) for q in device_graph.nodes},\n", " node_color=[QRED if q in q_to_i else QBLUE for q in device_graph.nodes])\n", " plt.show()\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:30.943351Z", "iopub.status.busy": "2024-10-18T09:31:30.943077Z", "iopub.status.idle": "2024-10-18T09:31:33.271332Z", "shell.execute_reply": "2024-10-18T09:31:33.270610Z" }, "id": "arUdjiqHIfCs" }, "outputs": [ { "data": { "image/svg+xml": [ "(5, 2): (5, 3): (5, 4): (6, 2): (6, 3): (6, 4): (7, 2): (7, 3): (7, 4): PhX(0.0149)^0.25PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5SYCSYCSYCSYCSYCSYCPhX(0.421)^0.919PhX(-0.609)^0.919PhX(-0.609)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.152)^0.5PhX(-0.417)^0.489PhX(0.308)^0.489PhX(0.0833)^0.511PhX(0.308)^0.489PhX(0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.5)^0.919PhX(-4.44e-16)^0.919PhX(-4.44e-16)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.0728)^0.5PhX(-0.417)^0.489PhX(-0.0833)^0.511PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.254)^0.919PhX(0.333)^0.919PhX(0.5)^0.919SYCSYCSYCSYCSYCSYCPhX(0.93)^0.303PhX(0.641)^0.511PhX(0.481)^0.319PhX(-0.75)^0.489PhX(-0.824)^0.303PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.558)^0.919PhX(0.167)^0.919PhX(-0.167)^0.919SYCSYCSYCSYCSYCSYCPhX(0.706)^0.319PhX(-0.609)^0.29PhX(0.843)^0.303PhX(0.5)^0.29PhX(-0.019)^0.319PhX(0.667)^0.29M('z')MMMMMMMM" ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i_to_q = {i: q for q, i in q_to_i.items()}\n", "# Since our nodes are contiguous integers starting from 0, we can flatten into a list\n", "device_qubits = [i_to_q[i] for i in range(len(i_to_q))]\n", "del i_to_q\n", "\n", "def _mapq(q):\n", " return device_qubits[q.x]\n", "\n", "mcircuit = mcircuit.transform_qubits(_mapq)\n", "SVGCircuit(mcircuit)" ] }, { "cell_type": "markdown", "metadata": { "id": "swSxqi6jIfCu" }, "source": [ "## Problem circuit functions" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:33.274528Z", "iopub.status.busy": "2024-10-18T09:31:33.274026Z", "iopub.status.idle": "2024-10-18T09:31:33.947051Z", "shell.execute_reply": "2024-10-18T09:31:33.946278Z" }, "id": "SgGS1rpjIfCv" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: HHHHHHHHHproblemg=0.123#3#4#5#6#7#8#9driverb=0.456#3#4#5#6#7#8#9" ], "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.problem_circuits import get_generic_qaoa_circuit\n", "circuit = get_generic_qaoa_circuit(\n", " problem_graph=problem.graph, \n", " qubits=qubits, \n", " gammas=[0.123], \n", " betas=[0.456],\n", ")\n", "SVGCircuit(circuit)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:33.950166Z", "iopub.status.busy": "2024-10-18T09:31:33.949890Z", "iopub.status.idle": "2024-10-18T09:31:34.366894Z", "shell.execute_reply": "2024-10-18T09:31:34.366073Z" }, "id": "pBd8nsknIfCx" }, "outputs": [ { "data": { "image/svg+xml": [ "0: 1: 2: 3: 4: 5: 6: 7: 8: HHHHHHHHHZZZZ^0.078ZZZZ^-0.078ZZZZ^-0.078ZZZZ^-0.078ZZZZ^0.078ZZZZ^0.078ZZZZ^-0.078ZZZZ^0.078ZZZZ^-0.078ZZZZ^0.078ZZZZ^-0.078ZZZZ^0.078X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29X^0.29" ], "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.problem_circuits import get_routed_hardware_grid_circuit\n", "circuit = get_routed_hardware_grid_circuit(\n", " problem_graph=problem.graph,\n", " qubits=qubits,\n", " coordinates=problem.coordinates,\n", " gammas=[0.123],\n", " betas=[0.456],\n", ")\n", "SVGCircuit(circuit)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2024-10-18T09:31:34.370144Z", "iopub.status.busy": "2024-10-18T09:31:34.369631Z", "iopub.status.idle": "2024-10-18T09:31:36.792070Z", "shell.execute_reply": "2024-10-18T09:31:36.791337Z" }, "id": "loLXlfMEIfC0" }, "outputs": [ { "data": { "image/svg+xml": [ "(5, 2): (5, 3): (5, 4): (6, 2): (6, 3): (6, 4): (7, 2): (7, 3): (7, 4): PhX(0.0149)^0.25PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5PhX(-0.0149)^0.75PhX(-0.5)^0.5PhX(-0.5)^0.5SYCSYCSYCSYCSYCSYCPhX(0.421)^0.919PhX(-0.609)^0.919PhX(-0.609)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.152)^0.5PhX(-0.417)^0.489PhX(0.308)^0.489PhX(0.0833)^0.511PhX(0.308)^0.489PhX(0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.5)^0.919PhX(-4.44e-16)^0.919PhX(-4.44e-16)^0.919SYCSYCSYCSYCSYCSYCPhX(-0.0728)^0.5PhX(-0.417)^0.489PhX(-0.0833)^0.511PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.254)^0.919PhX(0.333)^0.919PhX(0.5)^0.919SYCSYCSYCSYCSYCSYCPhX(0.93)^0.303PhX(0.641)^0.511PhX(0.481)^0.319PhX(-0.75)^0.489PhX(-0.824)^0.303PhX(-0.0833)^0.511SYCSYCSYCSYCSYCSYCPhX(0.558)^0.919PhX(0.167)^0.919PhX(-0.167)^0.919SYCSYCSYCSYCSYCSYCPhX(0.706)^0.319PhX(-0.609)^0.29PhX(0.843)^0.303PhX(0.5)^0.29PhX(-0.019)^0.319PhX(0.667)^0.29M('z')MMMMMMMM" ], "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from recirq.qaoa.problem_circuits import get_compiled_hardware_grid_circuit\n", "circuit, qubits = get_compiled_hardware_grid_circuit(\n", " problem=problem,\n", " qubits=device_qubits,\n", " gammas=[0.123],\n", " betas=[0.456],\n", ")\n", "SVGCircuit(circuit)" ] } ], "metadata": { "colab": { "name": "hardware_grid_circuits.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "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.15" } }, "nbformat": 4, "nbformat_minor": 0 }