{ "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-12-15T10:59:39.085745Z", "iopub.status.busy": "2024-12-15T10:59:39.085510Z", "iopub.status.idle": "2024-12-15T10:59:39.089252Z", "shell.execute_reply": "2024-12-15T10:59:39.088713Z" }, "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-12-15T10:59:39.092314Z", "iopub.status.busy": "2024-12-15T10:59:39.091821Z", "iopub.status.idle": "2024-12-15T11:00:08.510989Z", "shell.execute_reply": "2024-12-15T11:00:08.510157Z" }, "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-3l54cptf\r\n", " Running command git clone --filter=blob:none --quiet https://github.com/quantumlib/ReCirq /tmpfs/tmp/pip-req-build-3l54cptf\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.30.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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "Collecting pytket-cirq>=0.16 (from recirq==0.1.dev0)\r\n", " Using cached pytket_cirq-0.39.0-py3-none-any.whl.metadata (4.3 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: scikit-learn in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (1.6.0)\r\n", "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "Requirement already satisfied: numpy>=1.23.5 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from recirq==0.1.dev0) (2.0.2)\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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pfapack (from recirq==0.1.dev0)\r\n", " Using cached pfapack-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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.10.0)\r\n", "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.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting numpy>=1.23.5 (from recirq==0.1.dev0)\r\n", " Using cached numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\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.67.1)\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.24.0-py3-none-any.whl.metadata (3.0 kB)\r\n", "Collecting proto-plus>=1.20.0 (from cirq-google>=1.2.0->recirq==0.1.dev0)\r\n", " Using cached proto_plus-1.25.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.4-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.4-py3-none-any.whl.metadata (7.5 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.6.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pytket>=1.35.0 (from pytket-cirq>=0.16->recirq==0.1.dev0)\r\n", " Using cached pytket-1.37.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (4.4 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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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.2)\r\n", "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.2.1)\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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting pyasn1-modules==0.2.7 (from fqe->recirq==0.1.dev0)\r\n", " 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", "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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: 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: jedi>=0.16 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from ipython->recirq==0.1.dev0) (0.19.2)\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: 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", "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" ] }, { "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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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.66.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.37.0-py2.py3-none-any.whl.metadata (4.8 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.68.1)\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.68.1-py3-none-any.whl.metadata (1.1 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: parso<0.9.0,>=0.8.4 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.2)\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.1)\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.55.3)\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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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.17.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting lark>=1.1.9 (from pytket>=1.35.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", "Collecting graphviz>=0.20.3 (from pytket>=1.35.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.35.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.12.14)\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.3.1)\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.3.3)\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.4)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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) (3.0.0)\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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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.68.0-py3-none-any.whl.metadata (1.1 kB)\r\n", " Using cached grpcio_status-1.67.1-py3-none-any.whl.metadata (1.1 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Using cached grpcio_status-1.67.0-py3-none-any.whl.metadata (1.1 kB)\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", " 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", "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.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", " 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", "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.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", " 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", "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.11)\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.2)\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.28.1)\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.2.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.1)\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.4.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.7.0)\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.7)\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.1)\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.10.0)\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.21.1)\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: sniffio>=1.1 in /tmpfs/src/tf_docs_env/lib/python3.10/site-packages (from anyio->httpx>=0.25.0->jupyterlab->jupyter->fqe->recirq==0.1.dev0) (1.3.1)\r\n", "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.22.3)\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) (3.2.0)\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.11.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "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", "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.20241206)\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", "Using cached ipie-0.7.1-py3-none-any.whl (528 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\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.39.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-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)\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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached duet-0.2.9-py3-none-any.whl (29 kB)\r\n", "Using cached google_api_core-2.24.0-py3-none-any.whl (158 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.25.0-py3-none-any.whl (50 kB)\r\n", "Using cached pytket-1.37.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (8.3 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", "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.4-py3-none-any.whl (42 kB)\r\n", "Using cached pybind11-2.13.6-py3-none-any.whl (243 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached pytest-8.3.4-py3-none-any.whl (343 kB)\r\n", "Using cached beartype-0.19.0-py3-none-any.whl (1.0 MB)\r\n", "Using cached google_auth-2.37.0-py2.py3-none-any.whl (209 kB)\r\n", "Using cached googleapis_common_protos-1.66.0-py2.py3-none-any.whl (221 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=1282054 sha256=cce4f7f24a22cd68042724fcd926fac51f956de1f9abdc3edf1dc514b5f4eb18\r\n", " Stored in directory: /tmpfs/tmp/pip-ephem-wheel-cache-noy2qstf/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, pybind11, pyasn1-modules, protobuf, pluggy, pathspec, numpy, mypy-extensions, llvmlite, lark, iniconfig, imagesize, graphviz, filelock, duet, docutils, deprecation, Cython, beartype, alabaster, sphinx, qsim, pytest, proto-plus, numba, googleapis-common-protos, google-auth, black, pytket, pyscf, Py-BOBYQA, plum-dispatch, pfapack, grpcio-status, google-api-core, ipie, cirq-core, qsimcirq, openfermion, cirq-google, pytket-cirq, openfermionpyscf, fqe, recirq\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: protobuf\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 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": [ " Attempting uninstall: numpy\r\n", " Found existing installation: numpy 2.0.2\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Uninstalling numpy-2.0.2:\r\n", " Successfully uninstalled numpy-2.0.2\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.24.0 google-auth-2.37.0 googleapis-common-protos-1.66.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 numpy-1.26.4 openfermion-1.6.1 openfermionpyscf-0.5 pathspec-0.12.1 pfapack-1.0.2 pluggy-1.5.0 plum-dispatch-2.5.4 proto-plus-1.25.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.4 pytket-1.37.0 pytket-cirq-0.39.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-12-15T11:00:08.514535Z", "iopub.status.busy": "2024-12-15T11:00:08.514219Z", "iopub.status.idle": "2024-12-15T11:00:10.996718Z", "shell.execute_reply": "2024-12-15T11:00:10.996094Z" }, "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-12-15T11:00:11.000225Z", "iopub.status.busy": "2024-12-15T11:00:10.999815Z", "iopub.status.idle": "2024-12-15T11:00:11.003430Z", "shell.execute_reply": "2024-12-15T11:00:11.002751Z" }, "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-12-15T11:00:11.006157Z", "iopub.status.busy": "2024-12-15T11:00:11.005938Z", "iopub.status.idle": "2024-12-15T11:00:11.136387Z", "shell.execute_reply": "2024-12-15T11:00:11.135528Z" }, "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-12-15T11:00:11.139468Z", "iopub.status.busy": "2024-12-15T11:00:11.139168Z", "iopub.status.idle": "2024-12-15T11:00:11.342159Z", "shell.execute_reply": "2024-12-15T11:00:11.341276Z" }, "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-12-15T11:00:11.345123Z", "iopub.status.busy": "2024-12-15T11:00:11.344866Z", "iopub.status.idle": "2024-12-15T11:00:11.735900Z", "shell.execute_reply": "2024-12-15T11:00:11.734957Z" }, "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-12-15T11:00:11.738924Z", "iopub.status.busy": "2024-12-15T11:00:11.738653Z", "iopub.status.idle": "2024-12-15T11:00:11.764839Z", "shell.execute_reply": "2024-12-15T11:00:11.763871Z" }, "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-12-15T11:00:11.767686Z", "iopub.status.busy": "2024-12-15T11:00:11.767434Z", "iopub.status.idle": "2024-12-15T11:00:12.019760Z", "shell.execute_reply": "2024-12-15T11:00:12.018873Z" }, "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-12-15T11:00:12.022639Z", "iopub.status.busy": "2024-12-15T11:00:12.022377Z", "iopub.status.idle": "2024-12-15T11:00:12.274256Z", "shell.execute_reply": "2024-12-15T11:00:12.273263Z" }, "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-12-15T11:00:12.277070Z", "iopub.status.busy": "2024-12-15T11:00:12.276806Z", "iopub.status.idle": "2024-12-15T11:00:12.300951Z", "shell.execute_reply": "2024-12-15T11:00:12.300093Z" }, "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-12-15T11:00:12.303813Z", "iopub.status.busy": "2024-12-15T11:00:12.303528Z", "iopub.status.idle": "2024-12-15T11:00:12.322493Z", "shell.execute_reply": "2024-12-15T11:00:12.321654Z" }, "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-12-15T11:00:12.325899Z", "iopub.status.busy": "2024-12-15T11:00:12.325260Z", "iopub.status.idle": "2024-12-15T11:00:12.331059Z", "shell.execute_reply": "2024-12-15T11:00:12.330213Z" }, "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-12-15T11:00:12.334489Z", "iopub.status.busy": "2024-12-15T11:00:12.333785Z", "iopub.status.idle": "2024-12-15T11:00:14.828892Z", "shell.execute_reply": "2024-12-15T11:00:14.828169Z" }, "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-12-15T11:00:14.832018Z", "iopub.status.busy": "2024-12-15T11:00:14.831761Z", "iopub.status.idle": "2024-12-15T11:00:14.837139Z", "shell.execute_reply": "2024-12-15T11:00:14.836532Z" }, "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-12-15T11:00:14.839851Z", "iopub.status.busy": "2024-12-15T11:00:14.839282Z", "iopub.status.idle": "2024-12-15T11:00:17.279138Z", "shell.execute_reply": "2024-12-15T11:00:17.278504Z" }, "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-12-15T11:00:17.282296Z", "iopub.status.busy": "2024-12-15T11:00:17.282058Z", "iopub.status.idle": "2024-12-15T11:00:17.287598Z", "shell.execute_reply": "2024-12-15T11:00:17.286997Z" }, "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-12-15T11:00:17.290324Z", "iopub.status.busy": "2024-12-15T11:00:17.289800Z", "iopub.status.idle": "2024-12-15T11:00:19.458585Z", "shell.execute_reply": "2024-12-15T11:00:19.457971Z" }, "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-12-15T11:00:19.461726Z", "iopub.status.busy": "2024-12-15T11:00:19.461482Z", "iopub.status.idle": "2024-12-15T11:00:21.570727Z", "shell.execute_reply": "2024-12-15T11:00:21.570087Z" }, "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-12-15T11:00:21.573708Z", "iopub.status.busy": "2024-12-15T11:00:21.573445Z", "iopub.status.idle": "2024-12-15T11:00:21.578713Z", "shell.execute_reply": "2024-12-15T11:00:21.578124Z" }, "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-12-15T11:00:21.581788Z", "iopub.status.busy": "2024-12-15T11:00:21.581203Z", "iopub.status.idle": "2024-12-15T11:00:21.720637Z", "shell.execute_reply": "2024-12-15T11:00:21.720009Z" }, "id": "5p5qjKgAIfCg" }, "outputs": [ { "data": { "image/png": "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SU5OTtPze/bsYePGjW7tJ0yYwPbtDT9CZDCHEnDq23lxvftdBj8sLuPryhr+I9q7e2RMjYvC7oQ/vfK3pufq6upYs2YNl112mcuVBABZWVkYDAYmTJjgVX8iIp1NVxNIt7FkyRLee+89rrjiCu6++25sNhurVq1i2LBh7Ny506Vteno6r7zyCvv372fQoEEEj7scyztv8sPtOxkRHsrFEb2IMBrZWVnDawXFJAUHcV+q6+H8ObsP83rBSbZPHEk/c+tXGYyJjuSGS0by8MMPU1RUxMCBA/nLX/7C0aNHefHFF93af/DBB1x++eX06dOnY4IRETnPdGRAuo2RI0eyceNGYmNjWbhwIS+99BJLlizhhhtucGs7depUYmJieOONNwAImTodHHamxUdzuKaOlUcLeGR/Dv9XUs4tiTFsHDuUuGDX0wTVNgfmgIBz36bYbuevr73O3LlzeeWVV7j33nuxWq3885//5Morr3RpWl5ezvvvv89tt93WrixERDqTbkcs3d7ixYtZsmQJZ26qS5cuZc2aNRw4cACj0UjZQ3Ow7tje8DPEbTD006+4MSGGxRemtN7IaMQ06lJ6P7mqTetcsWIFv/3tbzl06JDbVQYiIp1NtyOWHu/++++nqqqKtWvXAhA+dz4Y23bma2+VhVqHgzn9+569oTGwYb1tYLVaWb58OQsWLFAhICI+RXMGxGeFhYVRVFTU9NiYkETYPb+iavnj53zt4DAzhyeNOXcfcx7AmJDUpvGYTCaXyY8iIr5CRwakRzFfP43Q23/RIesKveMuzNeld8i6RES6M80ZkB7JsiGTqtVPg93W5jkEABiNYAwkbM4DKgRExOdpzoD4NfP104h+cS2mUZc2PGE8xxUDp5abRl1K9ItrVQiIiF/RnAHpsYwJSfR+chW2Y4epXb+Oum1bXX7UqIGBgMQkgsdNJGTqDAL7X9BVwxUR6TIqBqTHC+w/gLB7HiAMcFpqsOd9h9Naj8EUhDEp2eVniUVE/JGKAfErBnMogQMHdfUwRES6Fc0ZEBER8XMqBkRERPycigERERE/p2JARETEz6kYEBER8XMqBkRERPycigERERE/p2JARETEz6kYEBER8XMqBkRERPycigERERE/p2JARETEz6kYEBER8XMqBkRERPycigERERE/p2JARETEzwW2pZHT6QSgoqLivA5GREREOk7j53bj53hr2lQMVFZWApCSktLOYYmIiEhnq6ysJDIystXlBue5ygXA4XCQn59PeHg4BoOhQwcoIiIi54fT6aSyspLExEQCAlqfGdCmYkBERER6Lk0gFBER8XMqBkRERPycigERERE/p2JARETEz6kYEBER8XMqBkRERPycigERERE/9/8BF42s84kjEzAAAAAASUVORK5CYII=", "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-12-15T11:00:21.722996Z", "iopub.status.busy": "2024-12-15T11:00:21.722769Z", "iopub.status.idle": "2024-12-15T11:00:22.057176Z", "shell.execute_reply": "2024-12-15T11:00:22.056537Z" }, "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": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgKxJREFUeJzt3Xd8FGX+wPHPzG7KppJOSSAQEAEpgjQVxALYEAQUDz1PEM+fBRXsHkKQ886KcioeeoKiKKhorAhiQZooBARMICEEAqGk190ku7Pz+2MhsCQhuxtIYb/v1yuvFzv12S+zM9955nmeUXRd1xFCCCGE11KbugBCCCGEaFqSDAghhBBeTpIBIYQQwstJMiCEEEJ4OUkGhBBCCC8nyYAQQgjh5SQZEEIIIbyc0ZWF7HY7hw4dIjg4GEVRznaZhBBCCHEG6LpOaWkpbdu2RVXrvv93KRk4dOgQcXFxZ6xwQgghhGg8Bw4cIDY2ts75LiUDwcHB1RsLCQk5MyUTQgghxFlVUlJCXFxc9XW8Li4lA8cfDYSEhEgyIIQQQrQw9T3ilwaEQgghhJeTZEAIIYTwcpIMCCGEEF5OkgEhhBDCy0kyIIQQQng5SQaEEEIILyfJgBBCCOHlJBkQQgghvJwkA0IIIYSXk2RACCGE8HKSDAghhBBeTpIBIYQQwstJMiCEEEJ4OUkGhBBCCC8nyYAQQgjh5SQZEEIIIbycsakLIIQQzcXRYitZeVVodgjwVencxo8AX7lnEuc+SQaEEF5L13XW7S7n/V/y2bC7nIJyzWm+okDHKF+uvTCUvw4JJy7St4lKKsTZpei6rte3UElJCaGhoRQXFxMSEtIY5RJCiLNqU3o5D79/kL05VRhU0Ox1L2tQwW6HMf1DeWZCWyKC5D5KtAyuXr+l/ksI4VVsmk7iJ4cY+/Je9uVWAadPBI7P14EvtxQzdFYaP+4sPfsFFaIRSTIghPAaNk3n7rezePvHfHTAXm+9qDPNDkVmjdvf2EfS70Vno4hCNAlJBoQQ56yysjKio6NZsmQJAP9YeojvtpVQ/8PRuum6I4m4f+EBNuwuc2tdq9VKXFwc8+fP97wAQpwFkgwIIc5Z8+bNIzg4mFtuuYUfd5by/toC8r6czOEFvWr/e7uvW9ufuugg5RUnGh0mJydzww03EB4eTkBAABdccAH/+c9/quf7+Pgwffp0nn32WSoqKs7Y9xSioaQVjBDinGS1Wpk3bx7Tpk3DZleYvvggqgJBfe9CM491Wla3WShZOwe/2MEub9+uO7oivvR1DrPGt2HVqlWMGjWKCy+8kKeffpqgoCAyMjI4ePCg03qTJk3iiSee4MMPP2Ty5Mln5LsK0VCSDAghzklff/01ubm53HzzzXyztYScEhtArRd8c9rXAJg6X+vWPuw6LP4ln78P9ef222/nuuuu49NPP0VV6650bdWqFSNGjODdd9+VZEA0G/KYQAjRoqxbt47+/fvj7+9PQkICCxYsIDExEUVRnJZLSkoiPj6ehIQEFv2Uh6rUsUGgYs+3KEYTfvGXu10eS5XOUy8s5OjRozz77LOoqkp5eTl2e91dFIYPH866desoKChwe39CnA2SDAghWowdO3YwYsQIcnJySExMZNKkScyaNYvPP/+8xrIbNmygb9++mKvsJO+z1NlzQLMUUJn9K37xV6D6BLhdJoMCa376gZCQELKzs+natStBQUGEhIRwzz331No2oF+/fui6zoYNG9zenxBngzwmEEK0GDNnzkTXddauXUv79u0BGDduHD179nRazmazkZGRwejRo/nzgOW0vQcqMlaC3Yapi3uPCI7TdMg/uBfFZmP06NHceeed/Pvf/+bnn3/mtddeo6ioiI8++shpnU6dOgGQkpLC9ddf79F+hTiTpGZACNEiaJrGypUrGTNmTHUiANCtWzdGjhzptGxBQQG6rhMWFkZmTtVpt2vZ8y2qf5hbjQdPVVVRjtls5vbbb+c///kPY8eO5T//+Q933303S5cuJT093Wn5sLAwAPLy8jzepxBnkiQDQogWITc3F4vFQpcuXWrM69q1a63r6LpOla3uagFbyUGsR//AP+FqFNXzilLF4AfAX/7yF6fpEydOBGDjxo01ygXUaOcgRFORZEAIcc4JDw9HURQKCwvx86n7gmvZ8y2Ax48IjlMDowGIiYlxmh4d7ZheWFjoNP3458jIyAbtV4gzRZIBIUSLEBUVhclkqlHlDrB7926nz0ajkYSEBDIzM0mI8atzmxXp32IIicM3pneDyhYRdwEA2dnZTtMPHTpUXfaTZWZmAo5HHEI0B5IMCCFaBIPBwMiRI0lKSiIrK6t6empqKitXrqyx/ODBg9m8eTPd2vljqOVMZ81LxVa01+2xBWqUS4VLho8B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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-12-15T11:00:22.060066Z", "iopub.status.busy": "2024-12-15T11:00:22.059483Z", "iopub.status.idle": "2024-12-15T11:00:24.263152Z", "shell.execute_reply": "2024-12-15T11:00:24.262510Z" }, "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-12-15T11:00:24.266504Z", "iopub.status.busy": "2024-12-15T11:00:24.266241Z", "iopub.status.idle": "2024-12-15T11:00:24.886916Z", "shell.execute_reply": "2024-12-15T11:00:24.886263Z" }, "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-12-15T11:00:24.889509Z", "iopub.status.busy": "2024-12-15T11:00:24.889269Z", "iopub.status.idle": "2024-12-15T11:00:25.279981Z", "shell.execute_reply": "2024-12-15T11:00:25.279300Z" }, "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-12-15T11:00:25.282761Z", "iopub.status.busy": "2024-12-15T11:00:25.282510Z", "iopub.status.idle": "2024-12-15T11:00:27.560676Z", "shell.execute_reply": "2024-12-15T11:00:27.560033Z" }, "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.16" } }, "nbformat": 4, "nbformat_minor": 0 }