{ "cells": [ { "cell_type": "markdown", "id": "73abea59-ab20-4855-bcc6-83151c863865", "metadata": {}, "source": [ "## Circuit-Cutting Implementation Details\n", "\n", "This notebook expands on the [circuit_cutting](00_circuit_cutting.ipynb) notebook to illustrate some of the workings behind circuit-cutting, along with implementation-specific details in `Cutqc2`.\n", "\n", "We create a `CutCircuit` object and use it for circuit-cutting a simple 5-qubit circuit (Figure 4 in the CutQC paper)." ] }, { "cell_type": "code", "execution_count": 1, "id": "626514eb-eac3-4c1f-8aac-1a7774413b42", "metadata": {}, "outputs": [], "source": [ "from math import pi\n", "from pathlib import Path\n", "\n", "import qiskit\n", "\n", "from cutqc2.core.cut_circuit import CutCircuit\n", "\n", "\n", "def example_circuit():\n", " qc = qiskit.QuantumCircuit(5)\n", " qc.reset(0)\n", " qc.reset(1)\n", " qc.reset(2)\n", " qc.reset(3)\n", " qc.reset(4)\n", "\n", " qc.h(0)\n", " qc.h(1)\n", " qc.h(2)\n", " qc.h(3)\n", " qc.h(4)\n", "\n", " qc.cz(0, 1)\n", " qc.t(2)\n", " qc.t(3)\n", " qc.t(4)\n", "\n", " qc.cz(0, 2)\n", " qc.rx(pi / 2, 4)\n", "\n", " qc.rx(pi / 2, 0)\n", " qc.rx(pi / 2, 1)\n", " qc.cz(2, 4)\n", "\n", " qc.t(0)\n", " qc.t(1)\n", " qc.cz(2, 3)\n", " qc.rx(pi / 2, 4)\n", "\n", " qc.h(0)\n", " qc.h(1)\n", " qc.h(2)\n", " qc.h(3)\n", " qc.h(4)\n", "\n", " return qc\n", "\n", "\n", "circuit = example_circuit()" ] }, { "cell_type": "code", "execution_count": 2, "id": "96bd58d8-4519-4ab7-8729-2757b83a26d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(INFO) (cut_circuit.py) (29-Sep-25 19:51:46) Trying with 2 subcircuits\n", "Set parameter Username\n", "(INFO) (mip.py) (29-Sep-25 19:51:46) Set parameter Username\n", "Set parameter LicenseID to value 2646086\n", "(INFO) (mip.py) (29-Sep-25 19:51:46) Set parameter LicenseID to value 2646086\n", "Academic license - for non-commercial use only - expires 2026-04-01\n", "(INFO) (mip.py) (29-Sep-25 19:51:46) Academic license - for non-commercial use only - expires 2026-04-01\n" ] } ], "source": [ "cut_circuit = CutCircuit(circuit=circuit)\n", "cut_circuit.cut(\n", " max_subcircuit_width=3, # Max qubits per subcircuit\n", " max_cuts=1, # Max total cuts in the circuit\n", " num_subcircuits=[2], # Desired number of subcircuits to try\n", ")" ] }, { "cell_type": "markdown", "id": "02d0d995-0a2c-4f7b-8fba-206b251db354", "metadata": {}, "source": [ "### The Computation Graph\n", "\n", "The `CutCircuit` class cuts the original circuit into subcircuits. These are internally labeled from `0` to `n-1`. These subcircuits have qubit wires connecting them. In the visual representation of the cut circuit below, we can see that qubit 2 of subcircuit 0 feeds into qubit 0 of subcircuit 1." ] }, { "cell_type": "code", "execution_count": 3, "id": "1aa1c8e6-9bee-4c7e-a8e6-9fc3a2932d48", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " ┌───┐ ┌─────────┐┌───┐ ┌───┐ \n", "q_0: ─|0>─┤ H ├──■──────────────■─┤ Rx(π/2) ├┤ T ├───┤ H ├────────\n", " ├───┤ │ ┌─────────┐ │ └──┬───┬──┘├───┤ └───┘ \n", "q_1: ─|0>─┤ H ├──■──┤ Rx(π/2) ├─┼────┤ T ├───┤ H ├────────────────\n", " ├───┤┌───┐└─────────┘ │ ├───┴┐ └───┘ ┌───┐\n", "q_2: ─|0>─┤ H ├┤ T ├────────────■────┤ // ├────■───────■─────┤ H ├\n", " ├───┤├───┤ └────┘ │ │ ├───┤\n", "q_3: ─|0>─┤ H ├┤ T ├───────────────────────────┼───────■─────┤ H ├\n", " ├───┤├───┤┌─────────┐ │ ┌─────────┐├───┤\n", "q_4: ─|0>─┤ H ├┤ T ├┤ Rx(π/2) ├────────────────■──┤ Rx(π/2) ├┤ H ├\n", " └───┘└───┘└─────────┘ └─────────┘└───┘\n" ] } ], "source": [ "print(cut_circuit)" ] }, { "cell_type": "markdown", "id": "0c1b24dc-6388-4cd2-b945-fdd9599d3f3e", "metadata": {}, "source": [ "This inter-subcircuit qubit wiring results in a *Computation Graph*, available as the `compute_graph` attribute of the `CutCircuit` class. We can draw it out using its `.draw()` method:" ] }, { "cell_type": "code", "execution_count": 4, "id": "98456026-65c8-4c45-8b38-506029e6270f", "metadata": {}, "outputs": [ { "data": { "image/png": "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r169FB8fr3//+9+qWbNmjvukpaVJkiZNmqSQkJBMx9SrV8+m6yyooroLe968eRo+fLhWrlypJUuW6K233tLy5ct16NChEv2cTQAAUD7YvKC8du2a+vbtq6NHj2rr1q1q0qRJrvYLCAiQJDk6Oqpbt262XlYGfn5+io6OzrD9yJEjGbZ5eXkpPj4+3bYbN27o1KlTmc4dHR2tzp07Wz9fuXJFp06dUu/evbNcT2Y369yqWbNmmjNnjmbNmqXRo0frvffeU1BQkHbt2sW7wAEAQLGyaeSdmpqq+++/Xzt37tRnn32mu+66K9f7VqtWTcHBwXr33XczLdRuPnvSVnr37q1du3Zpz5496Y5x85rFWwUGBurbb79Nt23JkiVZdiiXLFmi5ORk6+dFixYpJSVFvXr1ynI9rq6ukpShcL18+bJSUlKsn+3t7TV//nzZ2dnpjz/+UMuWLRUREZH1iQIAABQym3YoJ06cqHXr1qlv3766cOGCVq5cme77oUOHZrv/O++8o7vvvlvNmjXTY489poCAAJ05c0Y7d+7Uf/7zHx04cMBma33++ee1YsUK9ezZU08//bT1sUF+fn46ePBgurGjRo3SE088oYEDB6p79+46cOCANm3aJG9v70znvnHjhrp27arQ0FAdOXJECxcu1N13361+/fpluZ7AwEB5enpq8eLFcnNzk6urq+68804dOHBAY8eO1eDBg9WgQQOlpKRoxYoVsre316effqr58+erW7dumjZtmqZMmZLjtaoAAAA2Z8tbxoOCgoykLP9y49dffzWPPPKI8fHxMY6OjsbX19f06dPHfP7559YxtnhskDHGHDx40AQFBZkKFSoYX19f88orr5j33nsvw2ODUlNTzd/+9jfj7e1tKlasaEJCQsyxY8eyfGzQN998Yx5//HHj5eVlKlWqZB566CFz/vz5DL/VrY8NMsaYtWvXmiZNmhgHBwfrI4R+++03M3LkSBMYGGgqVKhgKleubDp37my2bt1qjDEmJSXFhIeHG4vFYrp06WJOnTqVq3MHAACwFYsxxhRPKVsyLV++XCNGjFBMTIz8/f2Lezm5FhERoQcffFCS9NFHH/EucAAAUGQK9TmUKDpdunTR/v37ddttt/EucAAAUKQoKMsQHx8fbdq0SWFhYQoPD1ePHj14EDoAACh0FJRljL29vaZOnaqtW7cqMjKS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tUovvPCC5s+frx49eljfsGOMsRaNFSpUUP369TV27Fj9/PPPunz5Mg9JB4ACoKAEUOp16dJF27dvV0JCgtasWaNFixYpKChIo0aNUuXKlZWammp90HlycrJ1P19fXx07dkyxsbHFt3gAKAO4yxtAqXfjxg05OTlJkh555BGdOXNGY8aMUb9+/TIdf/36da1du1azZ8+Wu7u7vvnmm6JcLgCUOQ7FvQAAKKibxeTf//53HT58WEOHDrUWk+vXr9eFCxf0008/KTY2VnFxcfrjjz/k4uKiRo0aafXq1cW5dAAoE+hQAigTvv32Wz300EMKDQ3V5MmTVblyZb3zzjsaN26cateure7du6tmzZqqXbu2brvtNjVr1kxOTk5ycnLind8AUEAUlADKjMWLF6tt27a64447rNuGDRumL774Qps3b1b79u3TjaeQBADboKAEUCalpKRYn0f52muv6W9/+5smTZqkOXPmFPPKAKDsoaAEUGalpqZan0u5f/9+3X333erZs6dWr16d46sXby1IAQDZI+sBUGbZ29vLGKPU1FS1bNlSV65c0ejRo7N8iPm5c+f0ySefSJIcHByUmpqqtLS0dGP4f3AAyIiCEkCZdvPtOTff7929e3frXeF/5eLiok8++US1a9fWjz/+KHt7e+s1lp9++qm+//57HoAOAJmgoARQLuQmvnZ1ddXq1as1ZMgQBQcH6/Dhw9bvLl++rIcfflj79u0rzGUCQKlEQQkAt3B2dtbcuXO1Y8cO+fr6Wrf37t1bt912mzZt2mTdRvwNAH/iphwAyKVPP/1UDz30kD744APrO8IBALwpBwByLTQ0VL/++qs+/vhjBQcHq2bNmjzLEgBE5A0Amfrhhx/0/PPP67PPPtPOnTut24cMGaLo6GgtXrxYkigmAUB0KAEgU15eXjp9+rTmzZunixcvysfHR4MGDVJQUJAWL16s4cOH66677lKvXr2Ke6kAUOy4hhIAshETE6PExES98847On36tPbs2aMqVaooJiZGHTt21JdffilnZ+fiXiYAFCsKSgDIRGbXRp4/f16S9P777+vnn3+Wi4uLNfoGgPKMghIAcpBZcXnjxg3rA9KNMRkeeP7Xbbe+BhIAyhquJgeAHNxaTN78f/Bb37aT2dtzkpKS9Mcff+jAgQOS/nwNZGpqaiGvFACKBx1KALCx6OhojRw5UqdOnVJCQoLuvPNOrVu3TlLm3UwAKO3oUAKADe3bt099+/aVvb295s6dq/Xr1ysxMVHLli1TfHw8xSSAMokOJQDYgDFGxhjdf//9OnTokKKioqzfrVu3TrNmzdKZM2f08ccf68477yzGlQKA7fEcSgCwAYvFop9++klffvmlduzYIUlKTExUxYoV1bBhQx08eFDBwcFKSUmx7hMTE6OTJ0+qVq1a8vPzK66lA0CBUVACgI389ttvql27tmrVqiVjjCpWrChJmjVrltzd3TVu3Dh16NBBxhg9/PDD+v7772VnZ6dLly5pypQpmjBhQvGeAADkEwUlANiIn5+fUlJSdPLkSfn6+kqSlixZonXr1ik8PFzdu3fX6dOnNWbMGG3btk3vvfeeGjRooLi4OI0aNUr16tVTnz59ivksACDvKCgBwEbatGmjzp07q2fPnho/frz27NmjjRs36vHHH9eQIUNkjNH8+fO1YcMGff/997rjjjskSQEBAfL399eRI0coKAGUStzlDQA2kJaWJklasWKFVq5cqXr16mn37t3q06ePHnvsMVWrVk3fffedFixYoDfeeEN33HGHkpOTJUkuLi5KSEjQqVOnivMUACDfKCgBwAbs7OysBWKvXr20c+dO1a5dWyNHjlSrVq0kSdOnT1fHjh01evRoSf97IPrq1av1n//8R/fff7+k/z08HQBKCwpKALARB4c/ryJ6//339a9//UsjRoxQjx49JEm//vqr4uLi9OSTT0qSrl+/LgcHB/36669644031L9/f9WpU0dS5m/eAYCSjIISAGzEYrHo8uXLmjFjhoKDgzVw4EDrnd61atWSh4eHzpw5I0lydnaWJD377LOqWLGiBg8erOrVqxfb2gGgILgpBwBsyN3dXd9++60uX75svdP75vWVzZo104cffqg2bdro/Pnzmj9/vuLi4vTiiy+qV69exblsACgQ3pQDAEVowIAB+uGHH+To6Cg3NzctWbJELVq0kJOTU3EvDQDyjYISAIpAamqq7O3tJUmHDh1S9erVValSJWskflNaWpq+++47dejQwToeAEo6CkoAKCJpaWmys/vfpevGmHQ34BhjdPz4cdWrV0+dOnXSqlWr5OPjUxxLBYA84aYcACgitxaTUsa7uS0Wi/z8/LRp0yZFRkaqZcuWioiIKMolAkC+UFACQAnTpUsX7d+/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F198oX79+undd9/V448/bpPjJCUlaefOnZo8ebLGjh1r3R4VFaW4uDgtXbpUo0aNssmxCsvmzZvTfT558qTCw8Pl7+9vfRd3UaOgBAAAxa53794Z3h89duxYtWrVSq+//rrNCso//vhDkuTp6Zlu+9mzZzPdXhI5OTkV9xIyIPIGAAAlkr29vWrXrq34+PhcjY+KitKgQYNUuXJlVahQQa1bt9a6deus34eFhVlj7Oeee04Wi0X+/v4aPny4goKCJEmDBw+WxWLJ8RrFyMhIdenSRS4uLqpVq5ZmzJih999/XxaLRbGxsdZxFotFYWFhGfa/edy/SkxM1OjRo1WlShW5u7vrkUce0cWLF9ONufUayu3bt6tNmzaSpBEjRshischisWj58uWS/rxedODAgfLx8VGFChVUq1YtDRkyRJcuXcr2/PKKDiUAACgxrl69qqSkJF26dEnr1q3Txo0bdf/99+e4X2RkpDp06CBfX1+98MILcnV11aeffqr77rtPX3zxhfr3768BAwbI09NTzzzzjB544AH17t1blSpVUvXq1eXr66tZs2Zp/PjxatOmjapXr57lsU6fPq3OnTsrJSXFeqwlS5bIxcWlwOc/duxYeXp6KiwsTEeOHNGiRYsUFxen7du3y2KxZBjfuHFjTZ8+XVOnTtXjjz+ujh07SpLat2+vGzduKCQkRNevX9e4cePk4+OjEydOaP369YqPj5eHh0eB12tlAAAASojRo0cbSUaSsbOzM4MGDTIXLlzIcb+uXbuaZs2amWvXrlm3paWlmfbt25v69etbt8XExBhJZu7cuen237Ztm5FkPvvssxyPNWHCBCPJ7N6927rt7NmzxsPDw0gyMTEx1u2SzLRp0zLM4efnZ4YNG2b9vGzZMiPJtGrVyty4ccO6/e9//7uRZNauXWvdFhQUZIKCgqyf9+7daySZZcuWpTvGTz/9lOtzKigibwAAUGJMmDBBW7Zs0QcffKBevXopNTVVN27cyHafCxcuKCIiQqGhoUpISNC5c+d07tw5nT9/XiEhIYqOjtaJEydstsYNGzaoXbt2atu2rXVb1apV9dBDDxV47scff1yOjo7Wz08++aQcHBy0YcOGPM91swO5adMmJSYmFnht2aGgBAAAJUajRo3UrVs3PfLII1q/fr2uXLmivn37ymTzpuhjx47JGKOXX35ZVatWTfc3bdo0Sf+76cYW4uLiVL9+/QzbGzZsWOC5/zpvpUqVVKNGjXTXZeZW3bp19eyzz+of//iHvL29FRISonfeecfm109KXEMJAABKsEGDBmn06NE6evRolgVbWlqaJGnSpEkKCQnJdEy9evUKbY35kZqaWiTHmTdvnoYPH661a9dq8+bNGj9+vGbPnq1du3apVq1aNjsOBSUAACixkpKSJCnbrlpAQIAkydHRUd26dSv0Nfn5+Sk6OjrD9iNHjmTY5uXlleEu9Rs3bujUqVOZzh0dHa3OnTtbP1+5ckWnTp3K8EilW2V2s86tmjVrpmbNmmnKlCnasWOHOnTooMWLF2vGjBnZ7pcXRN4AAKDYZRZJJycn68MPP5SLi4uaNGmS5b7VqlVTcHCw3n333UwLtZvPnrSV3r17a9euXdqzZ0+6Y6xatSrD2MDAQH377bfpti1ZsiTLDuWSJUuUnJxs/bxo0SKlpKSoV69eWa7H1dVVkjIUrpcvX1ZKSkq6bc2aNZOdnZ2uX7+e5Xz5QYcSAAAUu9GjR+vy5cvq1KmTfH19dfr0aa1atUpRUVGaN2+eKlWqlO3+77zzju6++241a9ZMjz32mAICAnTmzBnt3LlT//nPf3TgwAGbrfX555/XihUr1LNnTz399NPWxwb5+fnp4MGD6caOGjVKTzzxhAYOHKju3bvrwIED2rRpk7y9vTOd+8aNG+ratatCQ0N15MgRLVy4UHfffbf69euX5XoCAwPl6empxYsXy83NTa6urrrzzjt14MABjR07VoMHD1aDBg2UkpKiFStWyN7eXgMHDrTZ7yFRUAIAgBLg/vvv13vvvadFixbp/PnzcnNzU6tWrTRnzpxsi6mbmjRpon379ik8PFzLly/X+fPnVa1aNd1+++2aOnWqTddao0YNbdu2TePGjdOrr76qKlWq6IknnlDNmjX16KOPphv72GOPKSYmRu+9956+/vprdezYUVu2bFHXrl0znfvtt9/WqlWrNHXqVCUnJ+uBBx7QggULso21HR0d9cEHH+jFF1/UE088oZSUFC1btkxBQUEKCQnRV199pRMnTqhixYpq0aKFNm7cqHbt2tn0N7GY7G6bAgAAQK4sX75cI0aMUExMjPz9/Yt7OUWKaygBAABQIBSUAAAAKBAKSgAAABQI11ACAACgQOhQAgAAoEAoKAEAAFAgFJQAAAAoEApKAAAAFAgFJQAAAAqEghIAAAAFQkEJAACAAqGgBAAAQIFQUAIAAKBA/h9ig5mY4pG60gAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "compute_graph = cut_circuit.compute_graph\n", "compute_graph.draw()" ] }, { "cell_type": "markdown", "id": "304ba0c0-69fb-4ccd-8ebb-8dedd97c95a7", "metadata": {}, "source": [ "This visual representation of the compute graph tells us that:\n", " - We have 2 subcircuits, 0 and 1.\n", " - Subcircuit 0 has 15 gates, 3 qubits, 2 of which are \"effective\" qubits (contributing to the output).\n", " - Subcircuit 1 has 13 gates, 3 qubits, all 3 of which are \"effective\" (contributing to the output).\n", " - Qubit 2 (`q2`) of Subcircuit 0 feeds in as Qubit 0 (`q0`) of Subcircuit 1 (notice the direction of the arrow connecting the blue nodes).\n", "\n", "**Each edge of this compute graph represents the qubit wire that is being cut** as part of circuit-cutting.\n", "\n", "If we run the subcircuits of this `CutCircuit` object, we end up populating the individual subcircuit probability values as the `subcircuit_packed_probs` attribute." ] }, { "cell_type": "markdown", "id": "1994424a-c7e6-43f6-b88d-2896447f51a7", "metadata": {}, "source": [ "Circuit cutting decomposes any unknown quantum states at cut points into a linear combination of their Pauli bases, summing over four pairs of measurement circuits appended to the upstream subcircuit (subcircuit 0) and state initialization circuits prepended to the downstream subcircuit (subcircuit 1).\n", "\n", "Specifically, QPUs run four variations of subcircuit 0, each measures the upstream cut qubit q2 in one of the {I, X, Y, Z}\n", "Pauli bases. Correspondingly, QPUs run four variations of subcircuit 1, each initializes the downstream cut qubit q0 in one of the {|0⟩, |1⟩, |+⟩, |i⟩}\n", "states. \n", "\n", "Thus, in this example, subcircuit 0 will have $4^{1}$ probability vectors (each of length $2^{2}$ since it has 2 effective qubits), and subcircuit 1 will have $4^{1}$ probability vectors (each of length $2^{3}$ since it has 3 effective qubits).\n", "\n", "We can run the subcircuits and confirm that this is the case." ] }, { "cell_type": "code", "execution_count": 5, "id": "2c01e52c-cdf1-4792-97a9-70b7af243ca4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(INFO) (cut_circuit.py) (29-Sep-25 19:51:46) Running subcircuit 0 on backend: statevector_simulator\n", "(INFO) (cut_circuit.py) (29-Sep-25 19:51:46) Running subcircuit 1 on backend: statevector_simulator\n" ] } ], "source": [ "cut_circuit.run_subcircuits()" ] }, { "cell_type": "code", "execution_count": 6, "id": "96eeebd9-bdf6-494f-9ef7-e1a2256ef904", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, 4)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut_circuit.subcircuit_packed_probs[0].shape" ] }, { "cell_type": "code", "execution_count": 7, "id": "2454e193-1c27-4123-b36e-ff1101fe43d6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, 8)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut_circuit.subcircuit_packed_probs[1].shape" ] }, { "cell_type": "markdown", "id": "dfa26538-92df-4003-9406-d73353a40e31", "metadata": {}, "source": [ "### A more complex example\n", "\n", "If we create a 6-qubit Supremacy circuit, cut it, run the subcircuits, and plot the computation graph. *We're supplying the location of cuts manually through the **subcircuits** parameter to keep the example reproducible.* You will almost never need to do this in a real setting." ] }, { "cell_type": "code", "execution_count": 8, "id": "77b59c0d-895c-4094-bf32-eb51794680bc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(INFO) (cut_circuit.py) (29-Sep-25 19:51:46) Running subcircuit 0 on backend: statevector_simulator\n", "(INFO) (cut_circuit.py) (29-Sep-25 19:51:46) Running subcircuit 1 on backend: statevector_simulator\n", "(INFO) (cut_circuit.py) (29-Sep-25 19:51:46) Running subcircuit 2 on backend: statevector_simulator\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with Path.open(\"supremacy_6qubit.qasm3\", \"r\") as f:\n", " circuit_qasm3 = f.read()\n", "\n", "cut_circuit = CutCircuit(circuit_qasm3=circuit_qasm3)\n", "cut_circuit.cut(\n", " subcircuits=[\n", " [\"[0]0 [1]0\", \"[0]1 [2]1\", \"[1]1 [3]2\"],\n", " [\"[4]0 [5]0\", \"[2]0 [4]1\"],\n", " [\"[2]2 [3]0\", \"[3]1 [5]1\"],\n", " ]\n", ")\n", "cut_circuit.run_subcircuits()\n", "compute_graph = cut_circuit.compute_graph\n", "compute_graph.draw()" ] }, { "cell_type": "markdown", "id": "cf1fa06c-2d2a-4c4e-bbb1-1f1c842cb67d", "metadata": {}, "source": [ "Subcircuit 0 has two incoming edges and one outgoing edge, or in other words, two cut edges upstream and one cut edge downstream. It thus has $4^{2}$ initialization circuits and $4^{1}$ measurement circuits. Each combination of initialization or measurement circuit has a $2^{effective-qubits}$, or $2^{3}$ length probability vector. The total number of probability values for subcircuit 0 thus has the shape `(4, 4, 4, 8)`. Let's confirm this:" ] }, { "cell_type": "code", "execution_count": 9, "id": "e7cdc3c6-c048-4e26-8d47-08ece423ed03", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, 4, 4, 8)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut_circuit.subcircuit_packed_probs[0].shape" ] }, { "cell_type": "markdown", "id": "2338565d-ed3d-4cc8-9fdc-42a660da09a6", "metadata": {}, "source": [ "Similarly, for subcircuit 1 and subcircuit 2:" ] }, { "cell_type": "code", "execution_count": 10, "id": "de8832e3-c55d-459e-858b-174d85823c70", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, 4, 2)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut_circuit.subcircuit_packed_probs[1].shape" ] }, { "cell_type": "code", "execution_count": 11, "id": "a57edb9d-0575-4469-b613-37354bcac820", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, 4, 4, 4)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut_circuit.subcircuit_packed_probs[2].shape" ] }, { "cell_type": "markdown", "id": "e8fc610e-7662-42e0-8112-dd78f6a7a145", "metadata": {}, "source": [ "If we were to save the `CutCircuit` object to a file and inspect what we saved (see the [zarr](04_zarr.ipynb) notebook for further details), you should see the same result:" ] }, { "cell_type": "code", "execution_count": 12, "id": "60a9e843-ece3-4208-a5e3-a998552785de", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/media/vineetb/delta/projects/cutqc2/.venv/lib/python3.12/site-packages/zarr/core/dtype/npy/structured.py:318: UnstableSpecificationWarning: The data type (Structured(fields=(('subcircuit', Int32(endianness='little')), ('qubit', Int32(endianness='little'))))) does not have a Zarr V3 specification. That means that the representation of arrays saved with this data type may change without warning in a future version of Zarr Python. Arrays stored with this data type may be unreadable by other Zarr libraries. Use this data type at your own risk! Check https://github.com/zarr-developers/zarr-extensions/tree/main/data-types for the status of data type specifications for Zarr V3.\n", " v3_unstable_dtype_warning(self)\n", "/media/vineetb/delta/projects/cutqc2/.venv/lib/python3.12/site-packages/zarr/core/dtype/npy/string.py:248: UnstableSpecificationWarning: The data type (FixedLengthUTF32(length=20, endianness='little')) does not have a Zarr V3 specification. That means that the representation of arrays saved with this data type may change without warning in a future version of Zarr Python. Arrays stored with this data type may be unreadable by other Zarr libraries. Use this data type at your own risk! Check https://github.com/zarr-developers/zarr-extensions/tree/main/data-types for the status of data type specifications for Zarr V3.\n", " v3_unstable_dtype_warning(self)\n" ] } ], "source": [ "cut_circuit.to_file(\"supremacy_6qubit.zarr\")" ] }, { "cell_type": "code", "execution_count": 13, "id": "0e4cd401-db15-4232-bce7-86445926777e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;39m[\n", " \u001b[0;39m4\u001b[0m\u001b[1;39m,\n", " \u001b[0;39m4\u001b[0m\u001b[1;39m,\n", " \u001b[0;39m4\u001b[0m\u001b[1;39m,\n", " \u001b[0;39m4\u001b[0m\u001b[1;39m\n", "\u001b[1;39m]\u001b[0m\n" ] } ], "source": [ "!jq -r \".shape\" supremacy_6qubit.zarr/subcircuits/2/packed_probabilities/zarr.json" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }