{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "8a575039", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:44.526286Z", "iopub.status.busy": "2024-04-26T18:21:44.525909Z", "iopub.status.idle": "2024-04-26T18:21:44.529665Z", "shell.execute_reply": "2024-04-26T18:21:44.529225Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "9b738ac6", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Running Jobs on Qiskit Backends\n", "========================================\n", "\n", "|True-Q| supports direct execution of circuit collections on hardware and simulators\n", "that use a Qiskit backend. This includes the `IBMQ superconducting qubit chips\n", "`_ . Transpiling to the given backend is done\n", "automatically for any backend whose gates are a subset of\n", "``['id', 'rz', 'sx', 'x', 'cx']`` [#f1]_.\n", "\n", "Qiskit backends accept job requests that contain one or more circuits to be run at a\n", "specified number of shots. Like many modern quantum hardware platforms, these backends\n", "have restrictions on how many circuits a user can submit per job, and jobs are\n", "prioritized in a queuing system that contains many users' jobs. Thus, large circuits\n", "collections (e.g. as generated by |True-Q| diagnostic protocols) must be batched into\n", "multiple jobs.\n", "\n", "The |True-Q| :py:class:`~trueq.interface.Executor` class automates the batching and\n", "job submission process according to the above restrictions. An asynchronous thread\n", "monitors the status of each submitted job, and submits new jobs as spots open in the\n", "queue." ] }, { "cell_type": "code", "execution_count": 2, "id": "9227e59f", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:44.531691Z", "iopub.status.busy": "2024-04-26T18:21:44.531311Z", "iopub.status.idle": "2024-04-26T18:21:46.997678Z", "shell.execute_reply": "2024-04-26T18:21:46.997170Z" } }, "outputs": [], "source": [ "import trueq as tq\n", "import qiskit as qk" ] }, { "cell_type": "raw", "id": "a8a5c2b1", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Running jobs on a Qiskit backend requires credentials for the provider of the backend.\n", "See the provider's documentation for instructions for how to set this up. For example,\n", "the following snippet demonstrates how one instantiates a remote backend object from\n", "the IBM Quantum Experience. This example file does not have any credentials, so we\n", "make do with the local Qiskit simulator which uses the same backend abstraction." ] }, { "cell_type": "code", "execution_count": 3, "id": "f1d030a8", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:47.000343Z", "iopub.status.busy": "2024-04-26T18:21:46.999861Z", "iopub.status.idle": "2024-04-26T18:21:47.425509Z", "shell.execute_reply": "2024-04-26T18:21:47.424978Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: The class ``qiskit.providers.fake_provider.fake_backend.FakeBackendV2`` is deprecated as of qiskit 0.46.0. It will be removed in qiskit 1.0. All fake backend instances based on real device snapshots (`FakeVigo`,`FakeSherbrooke`,...) have been migrated to the `qiskit_ibm_runtime` package. To migrate your code, run `pip install qiskit-ibm-runtime` and use `from qiskit_ibm_runtime.fake_provider import FakeExample` instead of `from qiskit.providers.fake_provider import FakeExample`. \n", " (/tmp/ipykernel_310089/41091723.py:11)\n" ] } ], "source": [ "have_credentials = False\n", "\n", "if have_credentials:\n", " qk.IBMQ.load_account()\n", " provider = qk.IBMQ.get_provider()\n", " backend = provider.get_backend(\"ibmq_manila\")\n", "else:\n", " from qiskit_aer import AerSimulator\n", " from qiskit.providers.fake_provider import FakeMelbourneV2\n", "\n", " backend = AerSimulator.from_backend(FakeMelbourneV2())" ] }, { "cell_type": "raw", "id": "4b2ea6f6", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Submitting a Circuit\n", "--------------------\n", "\n", "The :py:class:`~trueq.interface.Executor` accepts both single\n", ":py:class:`~trueq.Circuit`\\s and :py:class:`~trueq.CircuitCollection`\\s. For example:" ] }, { "cell_type": "code", "execution_count": 4, "id": "de268536", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:47.427960Z", "iopub.status.busy": "2024-04-26T18:21:47.427561Z", "iopub.status.idle": "2024-04-26T18:21:47.789026Z", "shell.execute_reply": "2024-04-26T18:21:47.788533Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "ename": "ValueError", "evalue": "A circuit specifies gates between the qubits {frozenset({0, 1})}, but these qubits are not connected on aer_simulator_from(fake_melbourne).", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[4], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m circuit \u001b[38;5;241m=\u001b[39m tq\u001b[38;5;241m.\u001b[39mCircuit([{\u001b[38;5;241m0\u001b[39m: tq\u001b[38;5;241m.\u001b[39mGate\u001b[38;5;241m.\u001b[39mh}, {(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m): tq\u001b[38;5;241m.\u001b[39mGate\u001b[38;5;241m.\u001b[39mcx}])\n\u001b[1;32m 3\u001b[0m circuit\u001b[38;5;241m.\u001b[39mmeasure_all()\n\u001b[0;32m----> 5\u001b[0m ex \u001b[38;5;241m=\u001b[39m \u001b[43mtq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterface\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mExecutor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcircuit\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbackend\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mn_shots\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m128\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# the executor is asynchronous, call a blocking function to wait for it to finish\u001b[39;00m\n\u001b[1;32m 8\u001b[0m ex\u001b[38;5;241m.\u001b[39mblock()\n", "File \u001b[0;32m~/workspace/release trueq/trueq/interface/qiskit_submission.py:629\u001b[0m, in \u001b[0;36mExecutor.__init__\u001b[0;34m(self, circuits, backend, filename, n_shots, max_submissions, overwrite, store_compiled)\u001b[0m\n\u001b[1;32m 627\u001b[0m extra \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m(count_streaks(circuit))\u001b[38;5;241m.\u001b[39mdifference(config\u001b[38;5;241m.\u001b[39mconnectivity)\n\u001b[1;32m 628\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(extra) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m--> 629\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 630\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mA circuit specifies gates between the qubits \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mextra\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, but \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mthese qubits are not connected on \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbackend\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 632\u001b[0m )\n\u001b[1;32m 634\u001b[0m \u001b[38;5;66;03m# compile circuits, initialize batch executors\u001b[39;00m\n\u001b[1;32m 635\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExecutor - Compiling circuits and creating batches\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mValueError\u001b[0m: A circuit specifies gates between the qubits {frozenset({0, 1})}, but these qubits are not connected on aer_simulator_from(fake_melbourne)." ] } ], "source": [ "# Define a simple 2-qubit circuit to work with.\n", "circuit = tq.Circuit([{0: tq.Gate.h}, {(0, 1): tq.Gate.cx}])\n", "circuit.measure_all()\n", "\n", "ex = tq.interface.Executor(circuit, backend, n_shots=128)\n", "\n", "# the executor is asynchronous, call a blocking function to wait for it to finish\n", "ex.block()" ] }, { "cell_type": "raw", "id": "06f075bc", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The :py:class:`~trueq.interface.Executor` automatically populates the\n", ":py:class:`~trueq.Results` attribute of the submitted circuit:" ] }, { "cell_type": "code", "execution_count": 5, "id": "71c10b78", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:47.791399Z", "iopub.status.busy": "2024-04-26T18:21:47.790990Z", "iopub.status.idle": "2024-04-26T18:21:47.973069Z", "shell.execute_reply": "2024-04-26T18:21:47.972603Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Results({}, dim=None)\n" ] }, { "ename": "TypeError", "evalue": "unsupported operand type(s) for ** or pow(): 'NoneType' and 'int'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[5], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(circuit\u001b[38;5;241m.\u001b[39mresults)\n\u001b[0;32m----> 2\u001b[0m \u001b[43mcircuit\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresults\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/workspace/release trueq/trueq/results.py:645\u001b[0m, in \u001b[0;36mResults.plot\u001b[0;34m(self, sparse_cutoff, axis, error_bars)\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 620\u001b[0m \u001b[38;5;124;03mPlots a bar graph of these results. See also\u001b[39;00m\n\u001b[1;32m 621\u001b[0m \u001b[38;5;124;03m:py:func:`~trueq.visualization.plot_results` for plotting several\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[38;5;124;03m:type error_bars: :py:class:`bool`\u001b[39;00m\n\u001b[1;32m 642\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 643\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtrueq\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mvisualization\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgeneral\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m plot_results\n\u001b[0;32m--> 645\u001b[0m \u001b[43mplot_results\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 646\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msparse_cutoff\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msparse_cutoff\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror_bars\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merror_bars\u001b[49m\n\u001b[1;32m 647\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/workspace/release trueq/trueq/visualization/general.py:154\u001b[0m, in \u001b[0;36mplot_results\u001b[0;34m(labels, normalize, sparse_cutoff, axis, style, error_bars, *results)\u001b[0m\n\u001b[1;32m 151\u001b[0m all_items \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mlambda\u001b[39;00m: chain\u001b[38;5;241m.\u001b[39mfrom_iterable(r\u001b[38;5;241m.\u001b[39mitems() \u001b[38;5;28;01mfor\u001b[39;00m r \u001b[38;5;129;01min\u001b[39;00m group\u001b[38;5;241m.\u001b[39mvalues())\n\u001b[1;32m 153\u001b[0m \u001b[38;5;66;03m# create axis labels\u001b[39;00m\n\u001b[0;32m--> 154\u001b[0m size \u001b[38;5;241m=\u001b[39m \u001b[43mdim\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mn_sys\u001b[49m\n\u001b[1;32m 155\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mtype\u001b[39m(sparse_cutoff) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mbool\u001b[39m:\n\u001b[1;32m 156\u001b[0m cutoff \u001b[38;5;241m=\u001b[39m sparse_cutoff\n", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for ** or pow(): 'NoneType' and 'int'" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg8AAAE+CAYAAAAK6/M3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZw0lEQVR4nO3df2zV1f3H8Vdb6C1GWnBdb0t3tQPnb6XYyl1F4lzubIKp44/FTgztGn9M7YxyswmVHxVRylBIM6k2IEz/0BU1aow0ddrZGLULsdBEJ2CwYDvjvdA5elnRFnrP9499ua7SIu9re0vx+UjuHz2ez/2ce2zs08/9leSccwIAADhFyWO9AAAAML4QDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMDEHA9vv/22SkpKNG3aNCUlJemVV1751mNaWlp05ZVXyuPx6Pzzz9fTTz8dx1IBAMDpwBwPvb29mjlzpurq6k5p/r59+3TDDTfouuuuU3t7u+677z7ddtttev31182LBQAAYy/pu3wxVlJSkl5++WXNnz9/2DmLFy/Wtm3b9OGHH8bGfv3rX+vQoUNqamqK99QAAGCMTBjtE7S2tioQCAwaKy4u1n333TfsMX19ferr64v9HI1G9cUXX+gHP/iBkpKSRmupAACccZxzOnz4sKZNm6bk5JF5qeOox0MoFJLX6x005vV6FYlE9OWXX2rSpEknHFNTU6OVK1eO9tIAAPje6Orq0o9+9KMRua9Rj4d4VFVVKRgMxn7u6enRueeeq66uLqWnp4/hygAAGF8ikYh8Pp8mT548Yvc56vGQnZ2tcDg8aCwcDis9PX3Iqw6S5PF45PF4ThhPT08nHgAAiMNIPu0/6p/zUFRUpObm5kFjb7zxhoqKikb71AAAYBSY4+E///mP2tvb1d7eLum/b8Vsb29XZ2enpP8+5VBWVhabf+edd6qjo0P333+/du/erSeeeELPP/+8Fi1aNDKPAAAAJJQ5Ht5//33NmjVLs2bNkiQFg0HNmjVLK1askCR9/vnnsZCQpB//+Mfatm2b3njjDc2cOVPr1q3TU089peLi4hF6CAAAIJG+0+c8JEokElFGRoZ6enp4zQMAAAaj8TeU77YAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACASVzxUFdXp7y8PKWlpcnv92v79u0nnV9bW6sLL7xQkyZNks/n06JFi/TVV1/FtWAAADC2zPGwdetWBYNBVVdXa8eOHZo5c6aKi4t14MCBIec/99xzWrJkiaqrq7Vr1y5t3rxZW7du1QMPPPCdFw8AABLPHA/r16/X7bffroqKCl1yySWqr6/XWWedpS1btgw5/7333tOcOXO0YMEC5eXl6frrr9fNN9/8rVcrAADA6ckUD/39/Wpra1MgEPj6DpKTFQgE1NraOuQxV199tdra2mKx0NHRocbGRs2bN2/Y8/T19SkSiQy6AQCA08MEy+Tu7m4NDAzI6/UOGvd6vdq9e/eQxyxYsEDd3d265ppr5JzTsWPHdOedd570aYuamhqtXLnSsjQAAJAgo/5ui5aWFq1evVpPPPGEduzYoZdeeknbtm3TqlWrhj2mqqpKPT09sVtXV9doLxMAAJwi05WHzMxMpaSkKBwODxoPh8PKzs4e8pjly5dr4cKFuu222yRJl19+uXp7e3XHHXdo6dKlSk4+sV88Ho88Ho9laQAAIEFMVx5SU1NVUFCg5ubm2Fg0GlVzc7OKioqGPObIkSMnBEJKSookyTlnXS8AABhjpisPkhQMBlVeXq7CwkLNnj1btbW16u3tVUVFhSSprKxMubm5qqmpkSSVlJRo/fr1mjVrlvx+v/bu3avly5erpKQkFhEAAGD8MMdDaWmpDh48qBUrVigUCik/P19NTU2xF1F2dnYOutKwbNkyJSUladmyZfrss8/0wx/+UCUlJXrkkUdG7lEAAICESXLj4LmDSCSijIwM9fT0KD09fayXAwDAuDEaf0P5bgsAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYxBUPdXV1ysvLU1pamvx+v7Zv337S+YcOHVJlZaVycnLk8Xh0wQUXqLGxMa4FAwCAsTXBesDWrVsVDAZVX18vv9+v2tpaFRcXa8+ePcrKyjphfn9/v37xi18oKytLL774onJzc/Xpp59qypQpI7F+AACQYEnOOWc5wO/366qrrtKGDRskSdFoVD6fT/fcc4+WLFlywvz6+no9+uij2r17tyZOnBjXIiORiDIyMtTT06P09PS47gMAgO+j0fgbanraor+/X21tbQoEAl/fQXKyAoGAWltbhzzm1VdfVVFRkSorK+X1enXZZZdp9erVGhgYGPY8fX19ikQig24AAOD0YIqH7u5uDQwMyOv1Dhr3er0KhUJDHtPR0aEXX3xRAwMDamxs1PLly7Vu3To9/PDDw56npqZGGRkZsZvP57MsEwAAjKJRf7dFNBpVVlaWNm7cqIKCApWWlmrp0qWqr68f9piqqir19PTEbl1dXaO9TAAAcIpML5jMzMxUSkqKwuHwoPFwOKzs7Owhj8nJydHEiROVkpISG7v44osVCoXU39+v1NTUE47xeDzyeDyWpQEAgAQxXXlITU1VQUGBmpubY2PRaFTNzc0qKioa8pg5c+Zo7969ikajsbGPP/5YOTk5Q4YDAAA4vZmftggGg9q0aZOeeeYZ7dq1S3fddZd6e3tVUVEhSSorK1NVVVVs/l133aUvvvhC9957rz7++GNt27ZNq1evVmVl5cg9CgAAkDDmz3koLS3VwYMHtWLFCoVCIeXn56upqSn2IsrOzk4lJ3/dJD6fT6+//roWLVqkK664Qrm5ubr33nu1ePHikXsUAAAgYcyf8zAW+JwHAADiM+af8wAAAEA8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJjEFQ91dXXKy8tTWlqa/H6/tm/ffkrHNTQ0KCkpSfPnz4/ntAAA4DRgjoetW7cqGAyqurpaO3bs0MyZM1VcXKwDBw6c9Lj9+/fr97//vebOnRv3YgEAwNgzx8P69et1++23q6KiQpdcconq6+t11llnacuWLcMeMzAwoFtuuUUrV67U9OnTv/UcfX19ikQig24AAOD0YIqH/v5+tbW1KRAIfH0HyckKBAJqbW0d9riHHnpIWVlZuvXWW0/pPDU1NcrIyIjdfD6fZZkAAGAUmeKhu7tbAwMD8nq9g8a9Xq9CodCQx7zzzjvavHmzNm3adMrnqaqqUk9PT+zW1dVlWSYAABhFE0bzzg8fPqyFCxdq06ZNyszMPOXjPB6PPB7PKK4MAADEyxQPmZmZSklJUTgcHjQeDoeVnZ19wvxPPvlE+/fvV0lJSWwsGo3+98QTJmjPnj2aMWNGPOsGAABjxPS0RWpqqgoKCtTc3Bwbi0ajam5uVlFR0QnzL7roIn3wwQdqb2+P3W688UZdd911am9v57UMAACMQ+anLYLBoMrLy1VYWKjZs2ertrZWvb29qqiokCSVlZUpNzdXNTU1SktL02WXXTbo+ClTpkjSCeMAAGB8MMdDaWmpDh48qBUrVigUCik/P19NTU2xF1F2dnYqOZkPrgQA4EyV5JxzY72IbxOJRJSRkaGenh6lp6eP9XIAABg3RuNvKJcIAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYBJXPNTV1SkvL09paWny+/3avn37sHM3bdqkuXPnaurUqZo6daoCgcBJ5wMAgNObOR62bt2qYDCo6upq7dixQzNnzlRxcbEOHDgw5PyWlhbdfPPNeuutt9Ta2iqfz6frr79en3322XdePAAASLwk55yzHOD3+3XVVVdpw4YNkqRoNCqfz6d77rlHS5Ys+dbjBwYGNHXqVG3YsEFlZWVDzunr61NfX1/s50gkIp/Pp56eHqWnp1uWCwDA91okElFGRsaI/g01XXno7+9XW1ubAoHA13eQnKxAIKDW1tZTuo8jR47o6NGjOuecc4adU1NTo4yMjNjN5/NZlgkAAEaRKR66u7s1MDAgr9c7aNzr9SoUCp3SfSxevFjTpk0bFCDfVFVVpZ6entitq6vLskwAADCKJiTyZGvWrFFDQ4NaWlqUlpY27DyPxyOPx5PAlQEAgFNliofMzEylpKQoHA4PGg+Hw8rOzj7psY899pjWrFmjN998U1dccYV9pQAA4LRgetoiNTVVBQUFam5ujo1Fo1E1NzerqKho2OPWrl2rVatWqampSYWFhfGvFgAAjDnz0xbBYFDl5eUqLCzU7NmzVVtbq97eXlVUVEiSysrKlJubq5qaGknSH//4R61YsULPPfec8vLyYq+NOPvss3X22WeP4EMBAACJYI6H0tJSHTx4UCtWrFAoFFJ+fr6amppiL6Ls7OxUcvLXFzSefPJJ9ff361e/+tWg+6murtaDDz743VYPAAASzvw5D2NhNN6jCgDA98GYf84DAAAA8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgQjwAAAAT4gEAAJgQDwAAwIR4AAAAJsQDAAAwIR4AAIAJ8QAAAEyIBwAAYEI8AAAAE+IBAACYEA8AAMCEeAAAACbEAwAAMCEeAACACfEAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABgElc81NXVKS8vT2lpafL7/dq+fftJ57/wwgu66KKLlJaWpssvv1yNjY1xLRYAAIw9czxs3bpVwWBQ1dXV2rFjh2bOnKni4mIdOHBgyPnvvfeebr75Zt16663auXOn5s+fr/nz5+vDDz/8zosHAACJl+Scc5YD/H6/rrrqKm3YsEGSFI1G5fP5dM8992jJkiUnzC8tLVVvb69ee+212NhPf/pT5efnq76+fshz9PX1qa+vL/ZzT0+Pzj33XHV1dSk9Pd2yXAAAvtcikYh8Pp8OHTqkjIyMEbnPCZbJ/f39amtrU1VVVWwsOTlZgUBAra2tQx7T2tqqYDA4aKy4uFivvPLKsOepqanRypUrTxj3+XyW5QIAgP/3r3/9a2ziobu7WwMDA/J6vYPGvV6vdu/ePeQxoVBoyPmhUGjY81RVVQ0KjkOHDum8885TZ2fniD1wnNzxUuVqT+Kw54nHnicee554x6/en3POOSN2n6Z4SBSPxyOPx3PCeEZGBr9sCZaens6eJxh7nnjseeKx54mXnDxyb7A03VNmZqZSUlIUDocHjYfDYWVnZw95THZ2tmk+AAA4vZniITU1VQUFBWpubo6NRaNRNTc3q6ioaMhjioqKBs2XpDfeeGPY+QAA4PRmftoiGAyqvLxchYWFmj17tmpra9Xb26uKigpJUllZmXJzc1VTUyNJuvfee3Xttddq3bp1uuGGG9TQ0KD3339fGzduPOVzejweVVdXD/lUBkYHe5547HniseeJx54n3mjsufmtmpK0YcMGPfroowqFQsrPz9ef/vQn+f1+SdLPfvYz5eXl6emnn47Nf+GFF7Rs2TLt379fP/nJT7R27VrNmzdvxB4EAABInLjiAQAAfH/x3RYAAMCEeAAAACbEAwAAMCEeAACAyWkTD3zNd+JZ9nzTpk2aO3eupk6dqqlTpyoQCHzrvyOcyPp7flxDQ4OSkpI0f/780V3gGci654cOHVJlZaVycnLk8Xh0wQUX8N8XI+ue19bW6sILL9SkSZPk8/m0aNEiffXVVwla7fj29ttvq6SkRNOmTVNSUtJJvzfquJaWFl155ZXyeDw6//zzB7078pS500BDQ4NLTU11W7Zscf/4xz/c7bff7qZMmeLC4fCQ8999912XkpLi1q5d6z766CO3bNkyN3HiRPfBBx8keOXjl3XPFyxY4Orq6tzOnTvdrl273G9+8xuXkZHh/vnPfyZ45eOXdc+P27dvn8vNzXVz5851v/zlLxOz2DOEdc/7+vpcYWGhmzdvnnvnnXfcvn37XEtLi2tvb0/wyscv654/++yzzuPxuGeffdbt27fPvf766y4nJ8ctWrQowSsfnxobG93SpUvdSy+95CS5l19++aTzOzo63FlnneWCwaD76KOP3OOPP+5SUlJcU1OT6bynRTzMnj3bVVZWxn4eGBhw06ZNczU1NUPOv+mmm9wNN9wwaMzv97vf/va3o7rOM4l1z7/p2LFjbvLkye6ZZ54ZrSWeceLZ82PHjrmrr77aPfXUU668vJx4MLLu+ZNPPummT5/u+vv7E7XEM451zysrK93Pf/7zQWPBYNDNmTNnVNd5JjqVeLj//vvdpZdeOmistLTUFRcXm8415k9bHP+a70AgEBs7la/5/t/50n+/5nu4+Rgsnj3/piNHjujo0aMj+i1tZ7J49/yhhx5SVlaWbr311kQs84wSz56/+uqrKioqUmVlpbxery677DKtXr1aAwMDiVr2uBbPnl999dVqa2uLPbXR0dGhxsZGPkhwlIzU388x/1bNRH3NN74Wz55/0+LFizVt2rQTfgkxtHj2/J133tHmzZvV3t6egBWeeeLZ846ODv3tb3/TLbfcosbGRu3du1d33323jh49qurq6kQse1yLZ88XLFig7u5uXXPNNXLO6dixY7rzzjv1wAMPJGLJ3zvD/f2MRCL68ssvNWnSpFO6nzG/8oDxZ82aNWpoaNDLL7+stLS0sV7OGenw4cNauHChNm3apMzMzLFezvdGNBpVVlaWNm7cqIKCApWWlmrp0qWqr68f66WdsVpaWrR69Wo98cQT2rFjh1566SVt27ZNq1atGuul4STG/MoDX/OdePHs+XGPPfaY1qxZozfffFNXXHHFaC7zjGLd808++UT79+9XSUlJbCwajUqSJkyYoD179mjGjBmju+hxLp7f85ycHE2cOFEpKSmxsYsvvlihUEj9/f1KTU0d1TWPd/Hs+fLly7Vw4ULddtttkqTLL79cvb29uuOOO7R06VIlJ/P/uCNpuL+f6enpp3zVQToNrjzwNd+JF8+eS9LatWu1atUqNTU1qbCwMBFLPWNY9/yiiy7SBx98oPb29tjtxhtv1HXXXaf29nb5fL5ELn9ciuf3fM6cOdq7d28s1CTp448/Vk5ODuFwCuLZ8yNHjpwQCMfjzfHVSyNuxP5+2l7LOToaGhqcx+NxTz/9tPvoo4/cHXfc4aZMmeJCoZBzzrmFCxe6JUuWxOa/++67bsKECe6xxx5zu3btctXV1bxV08i652vWrHGpqanuxRdfdJ9//nnsdvjw4bF6COOOdc+/iXdb2Fn3vLOz002ePNn97ne/c3v27HGvvfaay8rKcg8//PBYPYRxx7rn1dXVbvLkye4vf/mL6+jocH/961/djBkz3E033TRWD2FcOXz4sNu5c6fbuXOnk+TWr1/vdu7c6T799FPnnHNLlixxCxcujM0//lbNP/zhD27Xrl2urq5u/L5V0znnHn/8cXfuuee61NRUN3v2bPf3v/899s+uvfZaV15ePmj+888/7y644AKXmprqLr30Urdt27YEr3j8s+z5eeed5ySdcKuurk78wscx6+/5/yIe4mPd8/fee8/5/X7n8Xjc9OnT3SOPPOKOHTuW4FWPb5Y9P3r0qHvwwQfdjBkzXFpamvP5fO7uu+92//73vxO/8HHorbfeGvK/zcf3uLy83F177bUnHJOfn+9SU1Pd9OnT3Z///GfzeflKbgAAYDLmr3kAAADjC/EAAABMiAcAAGBCPAAAABPiAQAAmBAPAADAhHgAAAAmxAMAADAhHgAAgAnxAAAATIgHAABg8n/w5bV5bVYVmgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(circuit.results)\n", "circuit.results.plot()" ] }, { "cell_type": "raw", "id": "5ce96216", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Submitting a Circuit Collection\n", "-------------------------------\n", "\n", "To submit a :py:class:`~trueq.CircuitCollection` we can make use of the\n", ":py:meth:`~trueq.CircuitCollection.batch` method (see also :doc:`batching`), as the\n", "following example demonstrates:" ] }, { "cell_type": "code", "execution_count": 6, "id": "5406f7b9", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:47.976378Z", "iopub.status.busy": "2024-04-26T18:21:47.975991Z", "iopub.status.idle": "2024-04-26T18:21:48.195055Z", "shell.execute_reply": "2024-04-26T18:21:48.194469Z" } }, "outputs": [], "source": [ "# Define a 3-qubit cycle to work with.\n", "cycle = {0: tq.Gate.x, 1: tq.Gate.y, 2: tq.Gate.h}\n", "\n", "# Generate a circuit collection to measure noise.\n", "circuits = tq.make_knr(cycle, [4, 32, 64], 24)" ] }, { "cell_type": "raw", "id": "c2292015", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The executor (defined below) will automatically attempt to batch the circuit\n", "collection into the maximum number of circuits per job that the backend supports.\n", "Here, however, we manually batch beforehand. Supposing the backend accepts at most\n", "75 circuits and has a memory cutoff for the number of gates allowed per job, we\n", "choose to riffle circuits in the batch by circuit depth. In our protocol above, we\n", "selected 3 sequence lengths, 4, 32, and 64, with 24 random circuits per sequence\n", "length per configuration. Thus we use fit :math:`24\\times 3+2=72` circuits per batch,\n", "where the extra :math:`2` are readout calibration (:tqdoc:`RCAL`\\) circuits." ] }, { "cell_type": "code", "execution_count": 7, "id": "5f95140b", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:48.197777Z", "iopub.status.busy": "2024-04-26T18:21:48.197329Z", "iopub.status.idle": "2024-04-26T18:21:48.200479Z", "shell.execute_reply": "2024-04-26T18:21:48.200047Z" } }, "outputs": [], "source": [ "ro_circuits = tq.make_rcal(circuits.labels)\n", "batches = circuits.batch(74, extra_circuits=ro_circuits, sequencer=tq.sequencer.RIFFLER)" ] }, { "cell_type": "raw", "id": "3730ccb1", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Run the batches on our backend. If a filename is provided, it will periodically save\n", "to the given file so that we can resume the experiment if, for example, our Python\n", "kernel crashes." ] }, { "cell_type": "code", "execution_count": 8, "id": "bce539b0", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:48.202481Z", "iopub.status.busy": "2024-04-26T18:21:48.202106Z", "iopub.status.idle": "2024-04-26T18:22:13.427402Z", "shell.execute_reply": "2024-04-26T18:22:13.426930Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "41e2566dacde43f8b05354ad49ce7e87", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a530306922a74f1298eca71fc5ff09df", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "55d944338b984db9b28c92789cf21c26", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "488cdb54cd504f92a736d74423edbad8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "28a129826b864f788cc4f0e3f59569da", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Button(button_style='danger', description='Cancel', disabled=True, layout=Layout(width='9em'), …" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAEeCAYAAAB8Gs22AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+v0lEQVR4nO3dd3xUVd7H8e+k90YSaggQpClNVAQRQpEiKoIrKPIIiggKimVRUCSAz0PTVVdXxd0FAjYUFruitCBKWUFAqgQMghBKCEmAhJLkPH9kM8uQmWRCMgnJfN6vV15hzj1z7m9mDjf3N/fccyzGGCMAAAAAAOASHpUdAAAAAAAA1RmJNwAAAAAALkTiDQAAAACAC5F4AwAAAADgQiTeAAAAAAC4EIk3AAAAAAAuROINAAAAAIALkXgDAAAAAOBCJN4AAAAAALgQiTcAAP9hsVg0efLkyg5D+/fvl8ViUWJiYmWHAgAAygGJNwCgQiQmJspisVh/vLy8VLduXQ0bNkyHDh2q7PDsWrt2rSZPnqyMjIwytzV58mSb1+/oJz4+vsz7crWdO3dq8uTJ2r9/f2WHAgBAleBV2QEAANzL1KlT1bBhQ509e1br169XYmKifvjhB23fvl1+fn6VHZ6NtWvXasqUKRo2bJjCwsLK1NaAAQPUuHFj6+PTp0/rkUceUf/+/TVgwABrec2aNRUbG6ucnBx5e3uXaZ+usnPnTk2ZMkXx8fFq0KBBZYcDAMAVj8QbAFCh+vTpo+uuu06S9NBDDykyMlIzZ87U559/roEDB1ZydK7TqlUrtWrVyvo4LS1NjzzyiFq1aqUhQ4YUqX+lfQkBAAAuH0PNAQCV6uabb5Yk7du3z6Z89+7d+tOf/qSIiAj5+fnpuuuu0+eff25T58KFC5oyZYquuuoq+fn5qUaNGurUqZOWLVtmrRMfH293+PawYcOKvVo7efJkjRs3TpLUsGFD61DwwuHVy5YtU6dOnRQWFqagoCA1bdpUzz333GW8A0XZu8d72LBhCgoK0oEDB3TbbbcpKChIdevW1ZtvvilJ2rZtm7p166bAwEDFxsbqgw8+KNJuRkaGnnjiCcXExMjX11eNGzfWzJkzlZ+fb1Nv4cKFateunYKDgxUSEqKWLVvqr3/9q6SCWwbuvvtuSVLXrl2t70tSUpIk6bPPPlPfvn1Vp04d+fr6Ki4uTi+++KLy8vJs9hEfH69rrrlGv/zyi7p06aKAgAA1btxYixcvliStXr1a7du3l7+/v5o2barly5fbPL9w6P7u3bs1cOBAhYSEqEaNGho7dqzOnj1rU9eVnxUAAM7gijcAoFIVJrLh4eHWsh07duimm25S3bp1NX78eAUGBurjjz/WnXfeqX/961/q37+/pILka/r06XrooYd0ww03KCsrSxs3btTPP/+sW265pUxxDRgwQHv27NGHH36oV199VZGRkZKkqKgo7dixQ7fddptatWqlqVOnytfXV3v37tWPP/5Ypn2WJC8vT3369FHnzp01a9Ysvf/++xozZowCAwP1/PPP67777tOAAQM0e/Zs3X///erQoYMaNmwoScrOzlaXLl106NAhjRw5UvXr19fatWs1YcIEpaam6rXXXpNUkKTee++96t69u2bOnClJ2rVrl3788UeNHTtWnTt31uOPP67XX39dzz33nJo3by5J1t+JiYkKCgrSU089paCgIK1cuVKTJk1SVlaWXnrpJZvXc/LkSd1222265557dPfdd+vtt9/WPffco/fff19PPPGERo0apcGDB+ull17Sn/70Jx08eFDBwcE2bQwcOFANGjTQ9OnTtX79er3++us6efKkFixYIEmV9lkBAGDDAABQAebNm2ckmeXLl5vjx4+bgwcPmsWLF5uoqCjj6+trDh48aK3bvXt307JlS3P27FlrWX5+vunYsaO56qqrrGWtW7c2ffv2LXa/Xbp0MV26dClSPnToUBMbG2tTJskkJCRYH7/00ktGkklJSbGp9+qrrxpJ5vjx4yW/cAeOHz9eZH+FUlJSjCQzb948m3glmWnTplnLTp48afz9/Y3FYjELFy60lu/evbtI2y+++KIJDAw0e/bssdnX+PHjjaenpzlw4IAxxpixY8eakJAQk5ub6zD2RYsWGUlm1apVRbZlZ2cXKRs5cqQJCAiw+Ty7dOliJJkPPvigSNweHh5m/fr11vJvv/22yPuRkJBgJJk77rjDZl+PPvqokWS2bt1qjCmfzwoAgLJiqDkAoEL16NFDUVFRiomJ0Z/+9CcFBgbq888/V7169SRJ6enpWrlypQYOHKhTp04pLS1NaWlpOnHihHr16qXk5GTrLOhhYWHasWOHkpOTK/Q1FE609tlnnxUZpu1qDz30kE0cTZs2VWBgoM398U2bNlVYWJh+++03a9miRYt08803Kzw83PqepqWlqUePHsrLy9P3339vbfPMmTM2w/VLw9/f3/rvws/v5ptvVnZ2tnbv3m1TNygoSPfcc0+RuJs3b6727dtbywv/ffHrKTR69Gibx4899pgk6euvv7a+HqlyPisAAAqReAMAKtSbb76pZcuWafHixbr11luVlpYmX19f6/a9e/fKGKMXXnhBUVFRNj8JCQmSpGPHjkkqmCE9IyNDTZo0UcuWLTVu3Dj98ssvLn8NgwYN0k033aSHHnpINWvW1D333KOPP/7Y5Ymdn5+foqKibMpCQ0NVr149WSyWIuUnT560Pk5OTtbSpUuLvKc9evSQ9N/39NFHH1WTJk3Up08f1atXTw8++KCWLl3qdIw7duxQ//79FRoaqpCQEEVFRVknj8vMzLSp6yjumJiYImWSbF5PoauuusrmcVxcnDw8PKy3MFTWZwUAwMW4xxsAUKFuuOEG66zmd955pzp16qTBgwfr119/VVBQkDUh+vOf/6xevXrZbaNwWa7OnTtr3759+uyzz/Tdd9/pn//8p1599VXNnj3bemXYYrHIGFOkjUsn+yoNf39/ff/991q1apW++uorLV26VB999JG6deum7777Tp6enpfddnEcteuo/OLXnZ+fr1tuuUXPPPOM3bpNmjSRJEVHR2vLli369ttv9c033+ibb77RvHnzdP/992v+/PnFxpeRkaEuXbooJCREU6dOVVxcnPz8/PTzzz/r2WefLZLsluX1OHJpIl9ZnxUAABcj8QYAVBpPT09Nnz5dXbt21d/+9jeNHz9ejRo1kiR5e3tbr8YWJyIiQg888IAeeOABnT59Wp07d9bkyZOtiXd4eLjdIcq///57iW1fmsRdzMPDQ927d1f37t31yiuvaNq0aXr++ee1atUqp+KuaHFxcTp9+rRTsfn4+Oj222/X7bffrvz8fD366KN655139MILL6hx48YO35ekpCSdOHFCS5YsUefOna3lKSkp5fY6LpWcnGydQE4qGDGRn59vM2N9VfusAADVD0PNAQCVKj4+XjfccINee+01nT17VtHR0YqPj9c777yj1NTUIvWPHz9u/feJEydstgUFBalx48Y6d+6ctSwuLk67d++2ed7WrVudmtU6MDBQUsGV3Iulp6cXqdumTRtJstn3lWTgwIFat26dvv322yLb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vbv59ddfbZ5z4sQJc++995qgoCATEhJiHnjggSJrw23dutV06tTJ+Pr6mrp165oZM2YUiefjjz82TZo0MT4+Pubqq682X331lc328ooFzivvPpWdnW169uxpoqKijLe3t4mNjTUjRoywOSgbQ5+q7orrVwcOHDCdO3c2ERERxtfX1zRu3NiMGzeuyJrLHKtwsfLuUxyr4Mzfv+nTp5t69eqZgIAA06FDB7NmzRqb7bGxsSYhIcGm7I033jD169c3Pj4+5oYbbjDr16+32Z6Tk2MeffRREx4ebgICAkz//v1NamqqTZ39+/ebPn36GH9/fxMZGWmefvppc+HCBZs6q1atMm3atDE+Pj6mUaNGNsfL8owFznNFn3KmTfpU9eZMH5gwYYKJiYkxeXl5dtvgnKqA5T9vBgAAAAAAcIEy3eMNAAAAAACKR+INAAAAAIALkXgDAAAAAOBCJN4AAAAAABvnz59X48aNtXbt2krZ/+zZs3X77bdXyr5dgcQbAAAAcFPTp0/X9ddfr+DgYEVHR+vOO+8sst732bNnNXr0aNWoUUNBQUG66667dPToUev2rVu36t5771VMTIz8/f3VvHlz/fWvf3W4zx9//FFeXl5q06aN03GOHDlSnp6eWrRoUalfo7PS09P12GOPqWnTpvL391f9+vX1+OOPKzMzs0jdxMREtWrVSn5+foqOjtbo0aOLbfvvf/+74uPjFRISIovFooyMjCJ19uzZo379+ikyMlIhISHq1KmTVq1aVWy7//jHP3TzzTcrPDxc4eHh6tGjh/7973/b1FmyZIl69uypGjVqyGKxaMuWLSW+F1JB4tuwYUN17NhRkrR//36Hz4+Pj9cTTzyhpKQkWSyWYn+SkpIkSf/6178UHx+v0NBQBQUFqVWrVpo6darS09MlSQ8++KB+/vlnrVmzxql4r3Qk3gAAAICbWr16tUaPHq3169dr2bJlunDhgnr27KkzZ85Y6zz55JP64osvtGjRIq1evVqHDx/WgAEDrNs3bdqk6Ohovffee9qxY4eef/55TZgwQX/729+K7C8jI0P333+/unfv7nSM2dnZWrhwoZ555hnNnTu3bC/4P86fP1+k7PDhwzp8+LBefvllbd++XYmJiVq6dKmGDx9uU++VV17R888/r/Hjx2vHjh1avny5evXqVeJr6N27t5577jmHdW677Tbl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AAAAuKnRo0frgw8+0Geffabg4GDrfduhoaHy9/dXaGiohg8frqeeekoREREKCQnRY489pg4dOujGG2+UVDC8vFu3burVq5eeeuopaxuenp6KioqSh4eH9Z7xQtHR0fLz8ytSfrE5c+aob9++at26tU15ixYt9OSTT+r999+3rp99/vx5DR8+XBMnTtT+/fuVkJCgMWPGFElki1OYdGdnZ+u9995TVlaWsrKyJBVc1fb09FSTJk3Ur18/jR07Vn//+98VEhKiCRMmqFmzZuratavDto8cOaIjR45o7969kqRt27YpODhY9evXV0REhDp06KDw8HANHTpUkyZNkr+/v/7xj38oJSVFffv2tbbTvXt39e/f3zpyYObMmZo0aZI++OADNWjQwPreFw6hlwq+GDhw4IAOHz4s6b9fGtSqVavIqIVCXbt21enTp7Vjxw6bz+ipp57StGnTVLNmTd144406ceKEXnzxRUVFRdksMVec9u3b65lnntHTTz+tQ4cOqX///qpTp4727t2r2bNnq1OnTho7dqykgkneGjVqpLi4OKfavqJV5pTqAAAAACqPJLs/8+bNs9bJyckxjz76qAkPDzcBAQGmf//+JjU11bo9ISHBbhuxsbEO91vScmJHjhwxXl5e5uOPP7a7/ZFHHjFt27Y1xvx3yapJkyaZGjVqmKCgIDNixAhz9uxZa31Hy11drHCpL3s/KSkp1nqZmZnmwQcfNGFhYSYiIsL079+/yBJn9l5vSe/zTz/9ZHr27GkiIiJMcHCwufHGG83XX39t005sbKxJSEiweWyv3YvrzJs3r8Q69gwcONCMHz/epiw3N9e8/vrrpmXLliYgIMDUq1fPDBo0yOb9uZi95cQKffTRR6Zz584mODjYBAYGmlatWpmpU6faLCfWs2dPM3369GLjrCosxpTy7nYAAAAAuEIMGzZMGRkZ+vTTTys7lGrll19+0S233KJ9+/ZZr55XpB07dqhbt27as2eP0/ePX8m4xxsAAAAAYKNVq1aaOXOmUlJSKmX/qampWrBgQbVIuiXu8QYAAAAA2DFs2LBK23dZ1yK/0jDUHAAAAAAAF2KoOQAAAAAALkTiDQAAAACAC5F4AwAAAADgQiTeAAAAAAC4EIk3AAAAAAAuROINAAAAAIALkXgDAAAAAOBCJN4AAAAAALjQ/wPJjuQ98SDUFgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ex = tq.interface.Executor(batches, backend, n_shots=128)\n", "\n", "# the executor is asynchronous, call a blocking function to wait for it to finish\n", "ex.block()\n", "\n", "circuits.plot.timestamps()" ] }, { "cell_type": "raw", "id": "77352379", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note ::\n", "\n", " When running in Jupyter, the executor has an automatically updating output which\n", " relies on IPywidgets being installed and enabled. If these are not installed then\n", " no display will show up when running the executor in Jupyter.\n", "\n", "Transpiling for a Specific Backend\n", "----------------------------------\n", "Sometimes it is useful to see what the circuit conversion is doing for a particular\n", "circuit. To do this, we first instantiate a True-Q configuration object from our\n", "desired backend. This will contain the device topology and native gates of the\n", "backend. We create a compiler object based on this configuration.\n", "\n", ".. note ::\n", "\n", " This process is done during submission automatically by the\n", " :py:class:`~trueq.interface.Executor`\\, and the steps below should only be used as\n", " a reference. The output of this should not be put into the ``Executor`` or it will\n", " apply the same compiler operations a second time, which may alter the circuit\n", " further." ] }, { "cell_type": "code", "execution_count": 9, "id": "406dfc85", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:22:13.429681Z", "iopub.status.busy": "2024-04-26T18:22:13.429253Z", "iopub.status.idle": "2024-04-26T18:22:13.544493Z", "shell.execute_reply": "2024-04-26T18:22:13.543993Z" } }, "outputs": [], "source": [ "config = tq.interface.qiskit.config_from_backend(backend)\n", "transpiler = tq.Compiler.from_config(config)" ] }, { "cell_type": "raw", "id": "68d66391", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Define a circuit." ] }, { "cell_type": "code", "execution_count": 10, "id": "b69513cf", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:22:13.546812Z", "iopub.status.busy": "2024-04-26T18:22:13.546463Z", "iopub.status.idle": "2024-04-26T18:22:13.568257Z", "shell.execute_reply": "2024-04-26T18:22:13.567820Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "
\n", "
\n", "
Circuit
\n", "
\n", "
\n", "
Key:
\n", "
\n", " No key present in circuit.\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " Gate(Y, X, ...)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate(Y, X, ...)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 88.064
  • \n", "
  • 'X': -93.711
  • \n", "
  • 'Z': 47.187
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.10\n", " \n", " \n", " -0.48j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.09\n", " \n", " \n", " 0.87j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.86\n", " \n", " \n", " 0.15j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.49\n", " \n", " \n", " 0.03j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (5):\n", " Gate.x\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.x
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.x
  • \n", "
  • Gate.cliff1
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 180.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((4,): Gate(Y, X, ...), (5,): Gate.x))" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit = tq.Circuit([{4: tq.Gate.random(2), 5: tq.Gate.x}])\n", "circuit" ] }, { "cell_type": "raw", "id": "40511e23", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Transpile the circuit based on the device." ] }, { "cell_type": "code", "execution_count": 11, "id": "58abf485", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:22:13.570335Z", "iopub.status.busy": "2024-04-26T18:22:13.569944Z", "iopub.status.idle": "2024-04-26T18:22:13.583936Z", "shell.execute_reply": "2024-04-26T18:22:13.583500Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "
\n", "
\n", "
Circuit
\n", "
\n", "
\n", "
Key:
\n", "
\n", " No key present in circuit.\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " RZGate(phi)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • RZGate(phi)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • phi = -3.239742
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Z': -185.624
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " -0.05\n", " \n", " \n", " 1.00j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.05\n", " \n", " \n", " -1.00j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (5):\n", " RZGate(phi)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • RZGate(phi)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff8
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • phi = -1.570796
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Z': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " SXGate()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • SXGate()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (5):\n", " SXGate()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • SXGate()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " RZGate(phi)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • RZGate(phi)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • phi = 1.017262
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Z': 58.285
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.87\n", " \n", " \n", " -0.49j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.87\n", " \n", " \n", " 0.49j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (5):\n", " RZGate(phi)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • RZGate(phi)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.id
  • \n", "
  • Gate.i
  • \n", "
  • Gate.cliff0
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • Identity
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • phi = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'I': 0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " SXGate()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • SXGate()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (5):\n", " SXGate()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • SXGate()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " -0.50j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " 0.50j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " RZGate(phi)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • RZGate(phi)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • phi = 1.534761
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Z': 87.935
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.72\n", " \n", " \n", " -0.69j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.72\n", " \n", " \n", " 0.69j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (5):\n", " RZGate(phi)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • RZGate(phi)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff8
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • phi = -1.570796
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Z': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((4,): RZGate(phi), (5,): RZGate(phi)),Cycle((4,): SXGate(), (5,): SXGate()),Cycle((4,): RZGate(phi), (5,): RZGate(phi)),Cycle((4,): SXGate(), (5,): SXGate()),Cycle((4,): RZGate(phi), (5,): RZGate(phi)))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transpiled_circuit = transpiler.compile(circuit)\n", "transpiled_circuit" ] }, { "cell_type": "raw", "id": "5f115025", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. rubric:: Footnotes\n", "\n", ".. [#f1] For older IBM devices, we also support the gateset\n", " ``['u1', 'u2', 'u3', 'cx']``." ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "nbsphinx,raw_mimetype,-all", "main_language": "python", "notebook_metadata_filter": "-all", "text_representation": { "extension": ".py", "format_name": "percent" } }, "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.8.10" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0beb6fe3523741a08472cdfbccba4b78": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "1045c6923a9a4589998c555e9fb280af": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ButtonModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ButtonModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "ButtonView", "button_style": "danger", "description": "Cancel", "disabled": true, "icon": "", "layout": "IPY_MODEL_679ffff60d1f4776a122ff53a7d7e663", "style": "IPY_MODEL_7a1c28b000d34ddbbe9fc480adef32cc", "tabbable": null, "tooltip": "Cancel all submitted jobs" } }, "28a129826b864f788cc4f0e3f59569da": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_1045c6923a9a4589998c555e9fb280af", "IPY_MODEL_8042206d0b9f41e184c001d289faf525" ], "layout": "IPY_MODEL_45c0a07787ad476aa12fd0519324f1be", "tabbable": null, "tooltip": null } }, "298c7c9bbb2f49ccb483ca7f23231ef8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "2d6882e16b304edb968238b5924f007f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "41e2566dacde43f8b05354ad49ce7e87": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_88c70a5ebfef40748f98a1b16536bf4c", "placeholder": "​", "style": "IPY_MODEL_b677a09dbc46477994387c7aa7ad970a", "tabbable": null, "tooltip": null, "value": "\n
\n
100% complete on aer_simulator_from(fake_melbourne)
\n
Save Queued
\n
\n \n
\n Warning: No filename\n
\n
\n
\n" } }, "421f011e0ba143cf95299dcc2e6a5c43": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "45c0a07787ad476aa12fd0519324f1be": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": "flex-end", "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": "flex", "flex": null, "flex_flow": "column", "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "488cdb54cd504f92a736d74423edbad8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_0beb6fe3523741a08472cdfbccba4b78", "placeholder": "​", "style": "IPY_MODEL_ef928af53cf94e4a9bd9198a13eabf18", "tabbable": null, "tooltip": null, "value": "\n
\n
\n
3 / 3
\n
DONE
\n
Job successful.
\n
\n" } }, "55d944338b984db9b28c92789cf21c26": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_afb11dc148984e029867ee253047b213", "placeholder": "​", "style": "IPY_MODEL_421f011e0ba143cf95299dcc2e6a5c43", "tabbable": null, "tooltip": null, "value": "\n
\n
\n
2 / 3
\n
DONE
\n
Job successful.
\n
\n" } }, "679ffff60d1f4776a122ff53a7d7e663": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "9em" } }, "7a1c28b000d34ddbbe9fc480adef32cc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ButtonStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "ButtonStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "button_color": null, "font_family": null, "font_size": null, "font_style": null, "font_variant": null, "font_weight": null, "text_color": null, "text_decoration": null } }, "8042206d0b9f41e184c001d289faf525": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "CheckboxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "CheckboxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "CheckboxView", "description": "Enable Cancel", "description_allow_html": false, "disabled": false, "indent": false, "layout": "IPY_MODEL_ac7523dd59514c77bff600793f30bc6d", "style": "IPY_MODEL_e8e5b843f54a4eb8bc2eed0b7884b5f6", "tabbable": null, "tooltip": null, "value": false } }, "88c70a5ebfef40748f98a1b16536bf4c": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a530306922a74f1298eca71fc5ff09df": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "HTMLView", "description": "", "description_allow_html": false, "layout": "IPY_MODEL_2d6882e16b304edb968238b5924f007f", "placeholder": "​", "style": "IPY_MODEL_298c7c9bbb2f49ccb483ca7f23231ef8", "tabbable": null, "tooltip": null, "value": "\n
\n
\n
1 / 3
\n
DONE
\n
Job successful.
\n
\n" } }, "ac7523dd59514c77bff600793f30bc6d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "8em" } }, "afb11dc148984e029867ee253047b213": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b677a09dbc46477994387c7aa7ad970a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } }, "e8e5b843f54a4eb8bc2eed0b7884b5f6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "CheckboxStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "CheckboxStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "" } }, "ef928af53cf94e4a9bd9198a13eabf18": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "HTMLStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "background": null, "description_width": "", "font_size": null, "text_color": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }