{ "cells": [ { "cell_type": "markdown", "id": "a42230b5-41d9-465c-904a-7d431cc72595", "metadata": {}, "source": [ "# How to perform a cutting workflow with multiple observables" ] }, { "cell_type": "markdown", "id": "6902602f-1392-4321-9cbe-5eb0921909b0", "metadata": {}, "source": [ "### Create a circuit to cut" ] }, { "cell_type": "code", "execution_count": 1, "id": "5defa9fb-e928-4fcb-9ae3-bed8e8f2527b", "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": "99344052-a7cc-4857-a77e-0db02003cb7d", "metadata": {}, "source": [ "### Specify the observables of interest" ] }, { "cell_type": "code", "execution_count": 2, "id": "42c2d640-7cce-41c3-9683-920449215c9d", "metadata": {}, "outputs": [], "source": [ "from qiskit.quantum_info import Pauli, SparsePauliOp\n", "\n", "observables = [\n", " Pauli(\"-XZII\"),\n", " SparsePauliOp([\"ZZII\", \"IZZI\", \"-IIZZ\", \"XIXI\", \"ZIZZ\", \"IXIX\"]),\n", "]" ] }, { "cell_type": "markdown", "id": "466343c4-35ce-496e-a887-5a126e0a6b40", "metadata": {}, "source": [ "### Gather unique observable terms" ] }, { "cell_type": "code", "execution_count": 3, "id": "defb33f4-820a-44aa-89ec-4f7eb13a49f5", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting.utils.observable_terms import gather_unique_observable_terms\n", "\n", "unique_observable_terms = gather_unique_observable_terms(observables)" ] }, { "cell_type": "markdown", "id": "81c1c9e1-e8a4-4a5c-80f3-35d00298459f", "metadata": {}, "source": [ "### Perform cutting workflow" ] }, { "cell_type": "code", "execution_count": 4, "id": "9830f036-904e-4900-98b1-7991da2915d0", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting import partition_problem\n", "\n", "partitioned_problem = partition_problem(\n", " circuit=qc, partition_labels=\"AABB\", observables=unique_observable_terms\n", ")\n", "subcircuits = partitioned_problem.subcircuits\n", "subobservables = partitioned_problem.subobservables" ] }, { "cell_type": "code", "execution_count": 5, "id": "77577d6f-4acc-468b-962c-81a09cc31fcd", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "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": "code", "execution_count": 6, "id": "37253e37-51f9-4aa4-9f5e-d8a032d639ce", "metadata": {}, "outputs": [], "source": [ "from qiskit_ibm_runtime.fake_provider import FakeManilaV2\n", "\n", "backend = FakeManilaV2()" ] }, { "cell_type": "code", "execution_count": 7, "id": "f15e198e-7f0b-4507-a73f-e4aab2f286ed", "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": "code", "execution_count": 8, "id": "5383d427-3285-43b1-8564-f451e1b4287e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/garrison/middleware/.direnv/python-3.11.0/lib/python3.11/site-packages/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 as a single batch\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": 9, "id": "154f4cf0-c45d-41b2-8091-b23a47b30c22", "metadata": {}, "outputs": [], "source": [ "# Retrieve results\n", "results = {label: job.result() for label, job in jobs.items()}" ] }, { "cell_type": "markdown", "id": "35c57f33-a128-4b0f-9a23-705cfecae993", "metadata": {}, "source": [ "### Reconstruct the expectation value of each unique term" ] }, { "cell_type": "code", "execution_count": 10, "id": "9f5e64a7-a334-4278-9c61-e78bbbc36368", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting import reconstruct_expectation_values\n", "\n", "# Get expectation values for each observable term\n", "reconstructed_term_expvals = reconstruct_expectation_values(\n", " results,\n", " coefficients,\n", " subobservables, # or unique_observable_terms if the circuit did not separate\n", ")" ] }, { "cell_type": "markdown", "id": "792853df-d4f9-43d1-9f7d-50e38768ceb8", "metadata": {}, "source": [ "### Reconstruct the expectation value of the original operators" ] }, { "cell_type": "code", "execution_count": 11, "id": "b134b767-ce53-4438-866f-a25952cb985b", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_cutting.utils.observable_terms import (\n", " reconstruct_observable_expvals_from_terms,\n", ")\n", "\n", "reconstructed_expvals = reconstruct_observable_expvals_from_terms(\n", " observables, dict(zip(unique_observable_terms, reconstructed_term_expvals))\n", ")" ] }, { "cell_type": "markdown", "id": "fd71a9ef-37cd-4687-9fe1-9b4ea3264f91", "metadata": {}, "source": [ "### Compare the reconstructed expectation values with the exact expectation value from the original circuit and observables" ] }, { "cell_type": "code", "execution_count": 12, "id": "986e5ce8-64a5-464a-9c43-45ccf1a65b2d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Reconstructed expectation values: [-0.20558381 0.6508525 ]\n", "Exact expectation values: [-0.17994235 0.56254612]\n", "Error in estimation: [-0.02564146 0.08830638]\n", "Relative error in estimation: [0.14249818 0.15697625]\n" ] } ], "source": [ "from qiskit_aer.primitives import EstimatorV2\n", "\n", "estimator = EstimatorV2()\n", "exact_expvals = estimator.run([(qc, observables)]).result()[0].data.evs\n", "print(\n", " f\"Reconstructed expectation values: {np.real(np.round(reconstructed_expvals, 8))}\"\n", ")\n", "print(f\"Exact expectation values: {np.round(exact_expvals, 8)}\")\n", "print(\n", " f\"Error in estimation: {np.real(np.round(reconstructed_expvals-exact_expvals, 8))}\"\n", ")\n", "print(\n", " f\"Relative error in estimation: {np.real(np.round((reconstructed_expvals-exact_expvals) / exact_expvals, 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 }