{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "991a3dc3", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:09.429459Z", "iopub.status.busy": "2024-04-26T18:20:09.429209Z", "iopub.status.idle": "2024-04-26T18:20:09.432951Z", "shell.execute_reply": "2024-04-26T18:20:09.432527Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "fc4075a6", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Circuit Collections\n", "===================\n", "\n", "A :py:class:`~trueq.CircuitCollection` is a list-like object containing\n", ":py:class:`~trueq.Circuit`\\s. This is a natural type in |True-Q| because the core\n", "strategy of many built-in :doc:`diagnostic <../error_diagnostics/index>` and\n", ":doc:`suppression <../error_suppression/index>` protocols is to produce a collection\n", "of many circuits. After the circuits have been run, their results can be jointly fit\n", "to estimate certain parameters of interest. It is also a natural type for quantum\n", "experiments more generally; one is often interested in executing a family of related\n", "circuits and a circuit collection is a convenient container to encapsulate them, their\n", "results, and their metadata.\n", "\n", "Creating and Appending to Circuit Collections\n", "---------------------------------------------\n", "\n", "Circuit collections are created by many of the tools built in to |True-Q|. For\n", "example, the most basic protocol, :tqdoc:`SRB`\\, has an associated function\n", ":py:func:`~trueq.make_srb` that instantiates a new collection of random circuits:" ] }, { "cell_type": "code", "execution_count": 2, "id": "76c70c2d", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:09.434772Z", "iopub.status.busy": "2024-04-26T18:20:09.434532Z", "iopub.status.idle": "2024-04-26T18:20:15.086694Z", "shell.execute_reply": "2024-04-26T18:20:15.086173Z" } }, "outputs": [], "source": [ "import trueq as tq\n", "\n", "# create circuits for simultaneous randomized benchmarking on qubits labeled 0 through 4\n", "srb_circuits = tq.make_srb(range(5), [4, 12, 24])" ] }, { "cell_type": "raw", "id": "74be0054", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Circuit collections can also be created manually from zero or more existing circuits:" ] }, { "cell_type": "code", "execution_count": 3, "id": "bcc3c77a", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:15.089460Z", "iopub.status.busy": "2024-04-26T18:20:15.088956Z", "iopub.status.idle": "2024-04-26T18:20:15.091458Z", "shell.execute_reply": "2024-04-26T18:20:15.091039Z" } }, "outputs": [], "source": [ "# create an empty circuit collection\n", "circuits = tq.CircuitCollection()" ] }, { "cell_type": "raw", "id": "2400b401", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In either case, we can append single circuits or iterables of circuits (including\n", "other circuit collections) to existing circuit collections. The appended circuits\n", "are not copied, so that the same circuit instance can exist in multiple collections.\n", "The ``+=`` operator is equivalent to the :py:meth:`~trueq.CircuitCollection.append`\n", "method." ] }, { "cell_type": "code", "execution_count": 4, "id": "702fbf02", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:15.093345Z", "iopub.status.busy": "2024-04-26T18:20:15.093047Z", "iopub.status.idle": "2024-04-26T18:20:15.588137Z", "shell.execute_reply": "2024-04-26T18:20:15.587601Z" } }, "outputs": [], "source": [ "# append a single circuit to the empty collection created above\n", "circuits += tq.Circuit({range(5): tq.Gate.h})\n", "\n", "# append randomized benchmarking circuits that were generated above\n", "circuits += srb_circuits\n", "\n", "# append new cycle benchmarking circuits to the collection\n", "circuits += tq.make_cb({range(5): tq.Gate.h}, [4, 12, 24])\n", "\n", "# append new readout calibration circuits\n", "circuits += tq.make_rcal(range(5))" ] }, { "cell_type": "raw", "id": "69a520a4", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Standard list-like conveniences are available on the collection:" ] }, { "cell_type": "code", "execution_count": 5, "id": "34dfc258", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:15.590917Z", "iopub.status.busy": "2024-04-26T18:20:15.590455Z", "iopub.status.idle": "2024-04-26T18:20:15.632484Z", "shell.execute_reply": "2024-04-26T18:20:15.632026Z" } }, "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", " \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", "
    \n", "
  • compiled_pauli: IYIZZ
  • \n", "
  • measurement_basis: ZZZZZ
  • \n", "
  • n_random_cycles: 4
  • \n", "
  • protocol: SRB
  • \n", "
  • twirl: Cliffords on [0, 1, 2, 3, 4]
  • \n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", " 1\n", "
\n", "
Marker 1
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\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.00j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Gate.cliff10\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff10
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff10
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -127.279
  • \n", "
  • 'X': -127.279
  • \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.00j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Gate.cliff18\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff18
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff18
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 69.282
  • \n", "
  • 'X': -69.282
  • \n", "
  • 'Z': -69.282
  • \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", " (3):\n", " Gate.cliff17\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff17
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff17
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -69.282
  • \n", "
  • 'X': -69.282
  • \n", "
  • 'Z': 69.282
  • \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", " (4):\n", " Gate.s\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.s
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.s
  • \n", "
  • Gate.sz
  • \n", "
  • Gate.cliff9
  • \n", "
\n", "
\n", "\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", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 2\n", "
\n", "
Marker 2
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Gate.cliff8\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff8
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff8
  • \n", "
\n", "
\n", "\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", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -1.00j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Gate.y\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.y
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.y
  • \n", "
  • Gate.cliff2
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 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", " (2):\n", " Gate.cliff16\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff16
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff16
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -69.282
  • \n", "
  • 'X': -69.282
  • \n", "
  • 'Z': -69.282
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Gate.cliff4\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \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.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " Gate.cliff4\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \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.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 3\n", "
\n", "
Marker 3
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Gate.sy\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -270.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", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Gate.cliff21\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff21
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff21
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 138.564
  • \n", "
  • 'X': -138.564
  • \n", "
  • 'Z': -138.564
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Gate.sy\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -270.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", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Gate.cliff18\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff18
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff18
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 69.282
  • \n", "
  • 'X': -69.282
  • \n", "
  • 'Z': -69.282
  • \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", " (4):\n", " Gate.cliff13\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff13
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff13
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 127.279
  • \n", "
  • 'Z': -127.279
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 4\n", "
\n", "
Marker 4
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Gate.cliff4\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \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.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Gate.cliff15\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff15
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff15
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 127.279
  • \n", "
  • 'Z': -127.279
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Gate.cliff15\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff15
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff15
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 127.279
  • \n", "
  • 'Z': -127.279
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Gate.id\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.id
  • \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", " \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", " (4):\n", " Gate.cliff16\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff16
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff16
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -69.282
  • \n", "
  • 'X': -69.282
  • \n", "
  • 'Z': -69.282
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 5\n", "
\n", "
Marker 5
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Gate.sy\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -270.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", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Gate.y\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.y
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.y
  • \n", "
  • Gate.cliff2
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 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", " (2):\n", " Gate.cliff19\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff19
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff19
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 69.282
  • \n", "
  • 'X': -69.282
  • \n", "
  • 'Z': 69.282
  • \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", " (3):\n", " Gate.sx\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \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.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " Gate.cliff13\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cliff13
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff13
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 127.279
  • \n", "
  • 'Z': -127.279
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 6\n", "
\n", "
Marker 6
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (4):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((0,): Gate.x, (1,): Gate.cliff10, (2,): Gate.cliff18, (3,): Gate.cliff17, (4,): Gate.s, marker=1),Cycle((0,): Gate.cliff8, (1,): Gate.y, (2,): Gate.cliff16, (3,): Gate.cliff4, (4,): Gate.cliff4, marker=2),Cycle((0,): Gate.sy, (1,): Gate.cliff21, (2,): Gate.sy, (3,): Gate.cliff18, (4,): Gate.cliff13, marker=3),Cycle((0,): Gate.cliff4, (1,): Gate.cliff15, (2,): Gate.cliff15, (3,): Gate.id, (4,): Gate.cliff16, marker=4),Cycle((0,): Gate.sy, (1,): Gate.y, (2,): Gate.cliff19, (3,): Gate.sx, (4,): Gate.cliff13, marker=5),Cycle((0,): Meas(), (1,): Meas(), (2,): Meas(), (3,): Meas(), (4,): Meas(), marker=6))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get the 5th (0-indexed) circuit\n", "circuits[5]" ] }, { "cell_type": "code", "execution_count": 6, "id": "2eb1067c", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:15.638652Z", "iopub.status.busy": "2024-04-26T18:20:15.638263Z", "iopub.status.idle": "2024-04-26T18:20:15.641365Z", "shell.execute_reply": "2024-04-26T18:20:15.640950Z" } }, "outputs": [ { "data": { "text/plain": [ "1083" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# find the number of circuits in the collection\n", "len(circuits)" ] }, { "cell_type": "code", "execution_count": 7, "id": "47126d16", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:15.643279Z", "iopub.status.busy": "2024-04-26T18:20:15.642990Z", "iopub.status.idle": "2024-04-26T18:20:15.645301Z", "shell.execute_reply": "2024-04-26T18:20:15.644886Z" } }, "outputs": [], "source": [ "# loop through circuits in the collection\n", "for circuit in circuits:\n", " pass" ] }, { "cell_type": "raw", "id": "05bbf90a", "metadata": { "API": null, "See": null, "documentation": null, "for": null, "raw_mimetype": "text/restructuredtext", "the": null }, "source": [ " :py:class:`~trueq.CircuitCollection` for a full list of available properties and\n", " methods, such as :py:attr:`~trueq.CircuitCollection.has_some_results`\\,\n", " :py:meth:`~trueq.CircuitCollection.fit`\\, :py:meth:`~trueq.CircuitCollection.save`\\,\n", " :py:meth:`~trueq.CircuitCollection.sum_results`\\, and\n", " :py:meth:`~trueq.CircuitCollection.batch`\\.\n", "\n", "Filtering Circuit Collections\n", "-----------------------------\n", "\n", "During data analysis, it is useful to be able to quickly filter specific subsets of\n", "circuits for processing. Rather than introspecting the gates and cycles within each\n", "circuit, or relying on their order within a collection, it is more robust and\n", "convenient to rely on circuit metadata to filter circuits. Every circuit owns a\n", ":py:attr:`~trueq.Circuit.key` attribute for this purpose, which is discussed in\n", ":ref:`key_filters`\\.\n", "\n", "To briefly summarize, we can use the :py:meth:`trueq.CircuitCollection.keys` method to\n", "display a table to find out which metedata is available to filter on (or\n", "``circuits.keys().names`` to more briefly display the available keynames), and\n", "subsequently the :py:meth:`~trueq.CircuitCollection.subset` method to specify criteria\n", "we want members of the subset to satisfy. For example, again using the circuit\n", "collection defined above, we can create a new collection containing only those\n", "circuits which are either :tqdoc:`CB` circuits or :tqdoc:`RCAL` circuits." ] }, { "cell_type": "code", "execution_count": 8, "id": "6f65dea6", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:15.647141Z", "iopub.status.busy": "2024-04-26T18:20:15.646856Z", "iopub.status.idle": "2024-04-26T18:20:17.656125Z", "shell.execute_reply": "2024-04-26T18:20:17.655624Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total Circuits: 1083 \tSimulated Circuits: 992\n" ] } ], "source": [ "# collect only CB and RCAL circuits\n", "cb_or_rcal_circuits = circuits.subset(protocol={\"CB\", \"RCAL\"})\n", "\n", "# simulate these circuits with a simple over-rotation noise source\n", "sim = tq.Simulator().add_overrotation(0.04)\n", "sim.run(cb_or_rcal_circuits)\n", "\n", "# we can see how many of the original circuits have been simulated\n", "print(\"Total Circuits:\", len(circuits), \"\\tSimulated Circuits:\", circuits.n_results)" ] }, { "cell_type": "raw", "id": "394b6393", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We can also filter based on whether or not the circuits have had their\n", ":py:attr:`~trueq.Circuit.results` populated with bitstrings or not, in combination\n", "with keyword filtering." ] }, { "cell_type": "code", "execution_count": 9, "id": "92bf76a8", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:17.658430Z", "iopub.status.busy": "2024-04-26T18:20:17.657996Z", "iopub.status.idle": "2024-04-26T18:20:17.665978Z", "shell.execute_reply": "2024-04-26T18:20:17.665562Z" } }, "outputs": [ { "data": { "text/plain": [ "91" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unsimulated_circuits = circuits.subset(has_results=False)\n", "len(unsimulated_circuits)" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "API,raw_mimetype,See,the,for,nbsphinx,documentation,-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" } }, "nbformat": 4, "nbformat_minor": 5 }