{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "ce8ac107", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T18:57:30.336220Z", "iopub.status.busy": "2024-03-26T18:57:30.335934Z", "iopub.status.idle": "2024-03-26T18:57:30.338535Z", "shell.execute_reply": "2024-03-26T18:57:30.338101Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "43696149", "metadata": { "lines_to_next_cell": 0, "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Topological Compilation\n", "================================\n", "\n", "This example demonstrates how the built-in compiler can be used to ensure that\n", "circuits obey the qudit connectivity of a system.\n", "\n", "Connectivity Graphs\n", "-------------------\n", "Connectivity graphs for our system can be declared through\n", ":py:class:`~trueq.visualization.Graph`. We can instantiate custom connectivity\n", "arrangements or use pre-configured systems.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "ec0dd81b", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T18:57:30.340369Z", "iopub.status.busy": "2024-03-26T18:57:30.340137Z", "iopub.status.idle": "2024-03-26T18:57:32.728681Z", "shell.execute_reply": "2024-03-26T18:57:32.728256Z" } }, "outputs": [ { "data": { "image/png": "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AAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAAAAAAAADIQwI/AAAAAAAAAAAAyEMCPwAAAAAAAAAAAMhDAj8AAAAA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346LFy9Gf39/+sx+H374YVy4cMEHn8C0meh89iDms+JRX1+f8WN7enri97//fZw8eTJ6enpiaGgobt68GQcPHox3333XPhQwrSYynz3I3Wc7YmZbuHBhnDlzJlpbW6O3tzeSyWT09fXF1atX48CBA/H++++PeHx7e3v8/ve/j+bm5ujr64uhoaG4ceNG/O1vf4uGhoaora2dpt8EKHYTnc8exNn7ikd9fX3Gn6uPtx3861//ak0IANzHGfwgS1KpVPzrv/5r3Lp1a9JhTCKRiLlz58YvfvGLrH2hCDBR5jMm68yZM/HBBx889Ou89NJL8eijj2ZhRACTYz5jMlKpVPzbv/1bdHZ2PtQ+1Jw5c+L/+D/+D5erB6aN+YzJam5unnD4MpoHnQ0LINfMZ0xGKpWKf//3f4+Ojo6H2oeqrKyM//E//od9KABgBHsGkCWJRCL27t076qUGJ/oaYhhgOmVjLiotLTWfFaF169Y99IeWa9eujY0bN2ZpRACTs27duli/fv1DvcbGjRvNZ0VmeB+qrKzsoV5n7969vsgBplU21oQlJSXmsyK0du3a2LJly0O9xurVqx0gAUy7tWvXxoYNGx7qNdavX28+KzKJRCJ+8IMfRFlZ2UPtR9mHAgBGY+8AsqimpiZee+21Ce+8JxKJKCkpiWQyGd99910ORwiQmebm5kgmk1FSUjLh+aysrCx++MMfRk1NTQ5HSD5KJBLxwgsvTPoyXGVlZdHa2hq3bt3K8sgAJqarqytaWlomHWqtXbs2vve97wndi9DChQvjtddei1mzZk1qTZhKpaK5uXnSZ3sAyJazZ89Oek1YWloaP/zhD12SsAglEol47rnnJn2gRFlZWbS1tUVnZ2eWRwYwMcNrwsme0GH16tXx0ksvWRMWoQULFsTrr78+qe8JE4mENSEAMCaBH2TZ8uXL46c//WnMnTs3ImLcHfjh++bOnRs///nP44knnohvvvkmvv766ykZK8BoDh48GAcPHownnngifv7zn094PvvpT38aK1asmJKxkn9KSkri1Vdfjccffzz9wdR4hh+zY8eO+G//7b9FaWlpvP32277QAabN7du34w9/+EMkEon4b//tv01qPnv11Vcf6szeFLZly5bFT3/605g3b15EZLYPVV1dHT/96U/jqaeeikOHDsXXX3/tCx1g2hw6dCi++uqr2L17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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import trueq as tq\n", "import trueq.compilation as tqc\n", "import trueq.visualization as tqv\n", "\n", "# create an instance of the Regetti Aspen-11 chip.\n", "graph = tqv.Graph.aspen_11(show_labels=True)\n", "graph.plot()" ] }, { "cell_type": "raw", "id": "330f9400", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "\n", "Allocating Labels\n", "-----------------\n", "We can begin by relabeling our circuit so that their labels match that of our\n", "connectivity graphs using :py:class:`~trueq.compilation.AllocateLabels`." ] }, { "cell_type": "code", "execution_count": 3, "id": "81379dc5", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T18:57:32.731093Z", "iopub.status.busy": "2024-03-26T18:57:32.730506Z", "iopub.status.idle": "2024-03-26T18:57:32.775368Z", "shell.execute_reply": "2024-03-26T18:57:32.774997Z" } }, "outputs": [ { "data": { "text/html": [ "
10 11 25 26 27 Key: relabeling: ((0, 1, 2, 3, 4), (26, 11, 25, 27, 10)) Labels: (26, 11) Name: Gate.cx Aliases: Gate.cx Gate.cnot Locally Equivalent: CNOT Generators: ZX: -90.00 IX: 90.00 ZI: 90.00 1.00 1.00 1.00 1.00 CX CX Labels: (26, 25) Name: Gate Locally Equivalent: Non-Clifford Generators: IZ: 94.47 XZ: -76.97 XI: 75.12 IY: 71.78 ZX: -70.32 XX: 65.42 ZI: 38.34 ... -0.80 -0.05j 0.17 0.48j -0.17 -0.22j -0.05 -0.15j 0.25 -0.12j -0.04 -0.05j -0.55 -0.02j -0.30 -0.73j 0.22 0.28j -0.31 0.23j -0.05 -0.65j -0.47 0.28j -0.32 -0.24j 0.03 -0.77j -0.29 -0.34j -0.05 0.23j Labels: (26, 27) Name: Gate.cx Aliases: Gate.cx Gate.cnot Locally Equivalent: CNOT Generators: ZX: -90.00 IX: 90.00 ZI: 90.00 1.00 1.00 1.00 1.00 CX CX Labels: (26, 10) Name: Gate Locally Equivalent: Non-Clifford Generators: XY: 96.53 ZY: -89.01 IZ: 81.77 ZX: -73.78 XZ: 60.97 YY: -44.09 XX: -40.58 ... 0.35 0.05j 0.35 0.28j -0.15 0.47j -0.54 -0.37j -0.53 -0.11j -0.32 0.05j 0.52 0.36j -0.07 -0.43j 0.04 -0.67j -0.04 0.00j -0.07 -0.57j -0.27 -0.38j 0.16 -0.32j -0.36 0.75j 0.05 0.12j 0.05 0.40j
" ], "text/plain": [ "DisplayWrapper( 10 11 25 26 27 Key: relabeling: ((0, 1, 2, 3, 4), (26, 11, 25, 27, 10)) Labels: (26, 11) Name: Gate.cx Aliases: Gate.cx Gate.cnot Locally Equivalent: CNOT Generators: ZX: -90.00 IX: 90.00 ZI: 90.00 1.00 1.00 1.00 1.00 CX CX Labels: (26, 25) Name: Gate Locally Equivalent: Non-Clifford Generators: IZ: 94.47 XZ: -76.97 XI: 75.12 IY: 71.78 ZX: -70.32 XX: 65.42 ZI: 38.34 ... -0.80 -0.05j 0.17 0.48j -0.17 -0.22j -0.05 -0.15j 0.25 -0.12j -0.04 -0.05j -0.55 -0.02j -0.30 -0.73j 0.22 0.28j -0.31 0.23j -0.05 -0.65j -0.47 0.28j -0.32 -0.24j 0.03 -0.77j -0.29 -0.34j -0.05 0.23j Labels: (26, 27) Name: Gate.cx Aliases: Gate.cx Gate.cnot Locally Equivalent: CNOT Generators: ZX: -90.00 IX: 90.00 ZI: 90.00 1.00 1.00 1.00 1.00 CX CX Labels: (10, 11) Name: Gate.swap Aliases: Gate.swap Locally Equivalent: SWAP Generators: YY: 90.00 XX: 90.00 ZZ: 90.00 1.00 1.00 1.00 1.00 SW SW Labels: (26, 11) Name: Gate Locally Equivalent: Non-Clifford Generators: XY: 96.53 ZY: -89.01 IZ: 81.77 ZX: -73.78 XZ: 60.97 YY: -44.09 XX: -40.58 ... 0.35 0.05j 0.35 0.28j -0.15 0.47j -0.54 -0.37j -0.53 -0.11j -0.32 0.05j 0.52 0.36j -0.07 -0.43j 0.04 -0.67j -0.04 0.00j -0.07 -0.57j -0.27 -0.38j 0.16 -0.32j -0.36 0.75j 0.05 0.12j 0.05 0.40j Labels: (11, 10) Name: Gate.swap Aliases: Gate.swap Locally Equivalent: SWAP Generators: YY: 90.00 XX: 90.00 ZZ: 90.00 1.00 1.00 1.00 1.00 SW SW " ], "text/plain": [ "DisplayWrapper( 10 11 26 Key: Labels: (10, 11) Name: Gate.swap Aliases: Gate.swap Locally Equivalent: SWAP Generators: YY: 90.00 XX: 90.00 ZZ: 90.00 1.00 1.00 1.00 1.00 SW SW Labels: (26, 11) Name: Gate Locally Equivalent: Non-Clifford Generators: XZ: -67.39 IZ: 61.28 XX: -61.11 XI: 59.85 ZI: 52.52 YI: 48.80 IY: -41.18 ... 0.67 -0.63j 0.17 0.06j -0.29 0.18j 0.11 0.05j 0.13 0.28j 0.00 0.05j 0.03 0.72j -0.07 -0.61j -0.04 0.12j 0.60 0.48j 0.38 0.09j 0.46 0.17j -0.11 0.20j 0.51 -0.34j -0.30 0.34j -0.37 0.48j Labels: (11, 26) Name: Gate Locally Equivalent: Non-Clifford Generators: ZZ: -71.77 YI: -65.92 IZ: 61.45 XX: 59.44 IX: -51.32 IY: 45.12 ZI: 41.94 ... 0.04 -0.31j 0.10 0.37j -0.33 -0.70j -0.27 0.28j 0.74 -0.07j -0.13 -0.49j -0.35 -0.14j 0.18 -0.08j -0.21 0.49j -0.75 0.02j -0.31 -0.09j -0.03 0.20j -0.04 -0.23j -0.17 -0.01j 0.35 -0.17j 0.73 0.49j Labels: (11, 10) Name: Gate.swap Aliases: Gate.swap Locally Equivalent: SWAP Generators: YY: 90.00 XX: 90.00 ZZ: 90.00 1.00 1.00 1.00 1.00 SW SW " ], "text/plain": [ "DisplayWrapper( 10 11 26 Key: Labels: (11, 10) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (10,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (11,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (11, 10) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (11,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (26, 11) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (11,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (11, 10) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (10,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (11,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (11, 10) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ " ], "text/plain": [ "DisplayWrapper(