{ "cells": [ { "cell_type": "markdown", "id": "ad1f14b4", "metadata": {}, "source": [ "# Gate Cutting to Reduce Circuit Width\n", "\n", "In this notebook, we will work through the steps of a [Qiskit pattern](https://docs.quantum.ibm.com/guides/intro-to-patterns) while using **circuit cutting** to reduce the number of qubits in a circuit. We will cut gates to enable us to reconstruct the expectation value of a four-qubit circuit using only two-qubit experiments.\n", "\n", "These are the steps that we will take:\n", "\n", "- **Step 1: Map problem to quantum circuits and operators**:\n", " - Map the hamiltonian onto a quantum circuit.\n", "- **Step 2: Optimize for target hardware** [_Uses the cutting addon_]:\n", " - Cut the circuit and observable.\n", " - Transpile the subexperiments for hardware.\n", "- **Step 3: Execute on target hardware**:\n", " - Run the subexperiments obtained in Step 2 using a `Sampler` primitive.\n", "- **Step 4: Post-process results** [_Uses the cutting addon_]:\n", " - Combine the results of Step 3 to reconstruct the expectation value of the observable in question." ] }, { "cell_type": "markdown", "id": "510910a6", "metadata": {}, "source": [ "## Step 1: Map\n", "\n", "### Create a circuit to cut" ] }, { "cell_type": "code", "execution_count": 1, "id": "96f5b72a", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit.circuit.library import EfficientSU2\n", "\n", "qc = EfficientSU2(4, entanglement=\"linear\", reps=2).decompose()\n", "qc.assign_parameters([0.4] * len(qc.parameters), inplace=True)\n", "\n", "qc.draw(\"mpl\", scale=0.8)" ] }, { "cell_type": "markdown", "id": "8638fdf1", "metadata": {}, "source": [ "### Specify an observable" ] }, { "cell_type": "code", "execution_count": 2, "id": "f75e8dd1", "metadata": {}, "outputs": [], "source": [ "from qiskit.quantum_info import SparsePauliOp\n", "\n", "observable = SparsePauliOp([\"ZZII\", \"IZZI\", \"-IIZZ\", \"XIXI\", \"ZIZZ\", \"IXIX\"])" ] }, { "cell_type": "markdown", "id": "162a5629", "metadata": {}, "source": [ "## Step 2: Optimize\n", "\n", "### Separate the circuit and observable according to a specified qubit partitioning\n", "\n", "Each label in `partition_labels` corresponds to the `circuit` qubit in the same index. Qubits sharing a common partition label will be grouped together, and non-local gates spanning more than one partition will be cut.\n", "\n", "**Note:** The ``observables`` kwarg to `partition_problem` is of type `PauliList`. Observable term coefficients and phases are ignored during decomposition of the problem and execution of the subexperiments. They may be re-applied during reconstruction of the expectation value." ] }, { "cell_type": "code", "execution_count": 3, "id": "30326299", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting import partition_problem\n", "\n", "partitioned_problem = partition_problem(\n", " circuit=qc, partition_labels=\"AABB\", observables=observable.paulis\n", ")\n", "subcircuits = partitioned_problem.subcircuits\n", "subobservables = partitioned_problem.subobservables\n", "bases = partitioned_problem.bases" ] }, { "cell_type": "markdown", "id": "9d2d42c3", "metadata": {}, "source": [ "### Visualize the decomposed problem" ] }, { "cell_type": "code", "execution_count": 4, "id": "6b54be63", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'A': PauliList(['II', 'ZI', 'ZZ', 'XI', 'ZZ', 'IX']),\n", " 'B': PauliList(['ZZ', 'IZ', 'II', 'XI', 'ZI', 'IX'])}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subobservables" ] }, { "cell_type": "code", "execution_count": 5, "id": "b7e06fac", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAACPCAYAAAA4J1eUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAppUlEQVR4nO3de1iUdf7/8ScDg4CgKCgoaFimeSqzzEN5TC3bNpUtKS1zN/O7eUplrTT91ma62XZQXCvL1tR2Nas1y5+VSmprFul6WDXzfAAExQPK+TAzvz/4ihEozMCcbl6P6+q6mnvu+cwbue8X77nvez63j81msyEiIiIiInYzubsAERERERFvpWZaRERERMRBaqZFRERERBykZlpERERExEFqpkVEREREHKRmWkRERETEQWqmRUREREQcpGZaRERERMRBaqZFRERERBykZlpERERExEFqpkVEREREHKRmWkRERETEQWqmRUREREQcpGZaRERERMRBaqZFRERERBykZlpERERExEFqpkVEREREHKRmWkRERETEQWqmRUREREQcpGZaRERERMRBaqZFRERERBykZlpERERExEFqpkVEREREHKRmWkRERETEQWqmRUREREQcpGZaRERERMRBaqZFRERERBykZlpERERExEFqpkVEREREHKRmWkRERETEQWqmRUREREQcpGZaRERERMRBfu4uoDZLfPwVso6nu7sMQmIiuXvJc9UaY1ISpObWUEHVFBUEb3ZxdxW1j6dsz1Az27QraL8Ro/GUHPCWDADPyQFlgOPUTLtR1vF0Mg+muLuMGpGaC0ez3F2FuJORtmdX0X4jRqMcsJ9ywPvpMg8REREREQepmRYRERERcZCaaRERERERB6mZFhERERFxkL6A6AXumjuWlnF9ALBaLOSdziTtu73smP0PctPPu7k6+x2fN5Jz3ywpeWAyYW7QhJAOfYka8Rf8w6LcW5y4hNG2aVfQfiNGogywnzLAc+nItJdI/+EnPrp5FJ/c/hTfjp1LWPsYer8b7+6yHBbctgc3f5BGh0UnaRH/T3KP7eTonIfcXZa4kNG2aVfQfiNGogywnzLAM6mZ9hLWwmLyMjLJTT/P6R/2c+DDDTTu3BpzcKC7S3OIj58/5gaR+IdFEdKuJ40GjCbnwPdYci+5uzRxEaNt066g/UaMRBlgP2WAZ1Iz7YUC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", "text/plain": [ "
" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subcircuits[\"A\"].draw(\"mpl\", scale=0.8)" ] }, { "cell_type": "code", "execution_count": 6, "id": "11e45e83", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subcircuits[\"B\"].draw(\"mpl\", scale=0.8)" ] }, { "cell_type": "markdown", "id": "4f8017b6-2954-4b51-8a07-f4de49832509", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### Calculate the sampling overhead for the chosen cuts\n", "\n", "Here we cut two CNOT gates, resulting in a sampling overhead of $9^2$.\n", "\n", "For more on the sampling overhead incurred by circuit cutting, refer to the [explanatory material](../explanation/index.rst)." ] }, { "cell_type": "code", "execution_count": 7, "id": "3d606ef8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sampling overhead: 81.0\n" ] } ], "source": [ "import numpy as np\n", "\n", "print(f\"Sampling overhead: {np.prod([basis.overhead for basis in bases])}\")" ] }, { "cell_type": "markdown", "id": "ef3b061c-cd1d-4931-85f6-155e00b355be", "metadata": {}, "source": [ "### Generate the subexperiments to run on the backend\n", "\n", "`generate_cutting_experiments` accepts `circuits`/`observables` args as dictionaries mapping qubit partition labels to the respective `subcircuit`/`subobservables`.\n", "\n", "To simulate the expectation value of the full-sized circuit, many subexperiments are generated from the decomposed gates' joint quasiprobability distribution and then executed on one or more backends. The number of samples taken from the distribution is controlled by `num_samples`, and one combined coefficient is given for each unique sample. For more information on how the coefficients are calculated, refer to the [explanatory material](../explanation/index.rst)." ] }, { "cell_type": "code", "execution_count": 8, "id": "2029d18e-0e91-4160-b8c9-02cb9e1ba3cb", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting import generate_cutting_experiments\n", "\n", "subexperiments, coefficients = generate_cutting_experiments(\n", " circuits=subcircuits, observables=subobservables, num_samples=np.inf\n", ")" ] }, { "cell_type": "markdown", "id": "444b0038-b3d5-469c-85b2-4c1d9d8fce05", "metadata": {}, "source": [ "### Choose a backend\n", "\n", "Here we are using a fake backend, which will result in Qiskit Runtime running in local mode (i.e., on a local simulator)." ] }, { "cell_type": "code", "execution_count": 9, "id": "36c89aa0-70aa-4615-8198-77ec85e8aa93", "metadata": {}, "outputs": [], "source": [ "from qiskit_ibm_runtime.fake_provider import FakeManilaV2\n", "\n", "backend = FakeManilaV2()" ] }, { "cell_type": "markdown", "id": "85a1d76a-5c47-4210-a742-9b22f02f7200", "metadata": {}, "source": [ "### Prepare the subexperiments for the backend\n", "\n", "We must transpile the circuits with our backend as the target before submitting them to Qiskit Runtime." ] }, { "cell_type": "code", "execution_count": 10, "id": "184e0f36-1279-48a3-aab7-b7603bb71f66", "metadata": {}, "outputs": [], "source": [ "from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager\n", "\n", "# Transpile the subexperiments to ISA circuits\n", "pass_manager = generate_preset_pass_manager(optimization_level=1, backend=backend)\n", "isa_subexperiments = {\n", " label: pass_manager.run(partition_subexpts)\n", " for label, partition_subexpts in subexperiments.items()\n", "}" ] }, { "cell_type": "markdown", "id": "d8870454-2173-4454-90b4-a034779510e0", "metadata": {}, "source": [ "## Step 3: Execute\n", "\n", "### Run the subexperiments using the Qiskit Runtime Sampler primitive" ] }, { "cell_type": "code", "execution_count": 11, "id": "2dbb8148-0482-4a66-8316-335125f8a2b3", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/garrison/Qiskit/qiskit-ibm-runtime/qiskit_ibm_runtime/session.py:157: UserWarning: Session is not supported in local testing mode or when using a simulator.\n", " warnings.warn(\n" ] } ], "source": [ "from qiskit_ibm_runtime import SamplerV2, Batch\n", "\n", "# Submit each partition's subexperiments to the Qiskit Runtime Sampler\n", "# primitive, in a single batch so that the jobs will run back-to-back.\n", "with Batch(backend=backend) as batch:\n", " sampler = SamplerV2(mode=batch)\n", " jobs = {\n", " label: sampler.run(subsystem_subexpts, shots=2**12)\n", " for label, subsystem_subexpts in isa_subexperiments.items()\n", " }" ] }, { "cell_type": "code", "execution_count": 12, "id": "64cef60b-5130-467e-8e01-7460d78560ed", "metadata": {}, "outputs": [], "source": [ "# Retrieve results\n", "results = {label: job.result() for label, job in jobs.items()}" ] }, { "cell_type": "markdown", "id": "f0032570", "metadata": {}, "source": [ "## Step 4: Post-process\n", "\n", "### Reconstruct the expectation value\n", "\n", "Reconstruct expectation values for each observable term and combine them to reconstruct the expectation value for the original observable." ] }, { "cell_type": "code", "execution_count": 12, "id": "7d57339c", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting import reconstruct_expectation_values\n", "\n", "# Get expectation values for each observable term\n", "reconstructed_expval_terms = reconstruct_expectation_values(\n", " results,\n", " coefficients,\n", " subobservables,\n", ")\n", "\n", "# Reconstruct final expectation value\n", "reconstructed_expval = np.dot(reconstructed_expval_terms, observable.coeffs)" ] }, { "cell_type": "markdown", "id": "53beaca3", "metadata": {}, "source": [ "### Compare the reconstructed expectation value with the exact expectation value from the original circuit and observable" ] }, { "cell_type": "code", "execution_count": 13, "id": "e3385ba5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Reconstructed expectation value: 0.6991539\n", "Exact expectation value: 0.56254612\n", "Error in estimation: 0.13660778\n", "Relative error in estimation: 0.24283836\n" ] } ], "source": [ "from qiskit_aer.primitives import EstimatorV2\n", "\n", "estimator = EstimatorV2()\n", "exact_expval = estimator.run([(qc, observable)]).result()[0].data.evs\n", "print(f\"Reconstructed expectation value: {np.real(np.round(reconstructed_expval, 8))}\")\n", "print(f\"Exact expectation value: {np.round(exact_expval, 8)}\")\n", "print(f\"Error in estimation: {np.real(np.round(reconstructed_expval-exact_expval, 8))}\")\n", "print(\n", " f\"Relative error in estimation: {np.real(np.round((reconstructed_expval-exact_expval) / exact_expval, 8))}\"\n", ")" ] } ], "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.11.0" } }, "nbformat": 4, "nbformat_minor": 5 }