diff --git a/.gitignore b/.gitignore index 3105d955d78..67454708279 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ poetry.lock Untitled*.ipynb *.tar *.tar.gz +How_to_get_and_visualize_scheduler_timing.ipynb diff --git a/docs/guides/_toc.json b/docs/guides/_toc.json index 97d32d5470b..b73c09c08bc 100644 --- a/docs/guides/_toc.json +++ b/docs/guides/_toc.json @@ -634,6 +634,11 @@ "title": "Visualize circuits", "url": "/docs/guides/visualize-circuits" }, + { + "title": "Visualize circuit timing", + "url": "/docs/guides/visualize-circuit-timing" + }, + { "title": "Plot quantum states", "url": "/docs/guides/plot-quantum-states" diff --git a/docs/guides/classical-feedforward-and-control-flow.ipynb b/docs/guides/classical-feedforward-and-control-flow.ipynb index 9407e8abb53..b1f1d41a667 100644 --- a/docs/guides/classical-feedforward-and-control-flow.ipynb +++ b/docs/guides/classical-feedforward-and-control-flow.ipynb @@ -287,12 +287,12 @@ }, { "cell_type": "markdown", - "id": "203cbeaa-3522-4ebd-8ac7-df7741f759f2", + "id": "f01b52c8-77d3-4052-bece-75ca998e7bb5", "metadata": {}, "source": [ "## Find backends that support dynamic circuits\n", "\n", - "To find all backends that support dynamic circuits and that your account can access, run code like the following. This example assumes that you have [saved your login credentials.](/docs/guides/save-credentials) You could also [initialize your Qiskit Runtime service account](/docs/guides/initialize-account#explicit) with manually-specified credentials. In this case, you could view backends available on a specific instance or plan type, for example.\n", + "To find all backends that your account can access and support dynamic circuits, run code like the following. This example assumes that you have [saved your login credentials.](/docs/guides/save-credentials) You could also [explicitly specify credentials](/docs/guides/initialize-account#explicit) when initializing your Qiskit Runtime service account. This would let you view backends available on a specific instance or plan type, for example.\n", "\n", "\n", "The backends that are available to the account depend on the instance specified in the credentials.\n", @@ -302,7 +302,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2ddb1b97-4223-427b-a4cd-99e2f6ccbfe9", + "id": "6b04b732-8143-4d76-bc43-a12ed0790bf6", "metadata": {}, "outputs": [], "source": [ diff --git a/docs/guides/map-problem-to-circuits.mdx b/docs/guides/map-problem-to-circuits.mdx index 4c8f956ba7c..a623e0b4198 100644 --- a/docs/guides/map-problem-to-circuits.mdx +++ b/docs/guides/map-problem-to-circuits.mdx @@ -30,6 +30,7 @@ The output of this step in a Qiskit pattern is normally a collection of circuits * [Construct circuits](./construct-circuits) * [Measure qubits](./measure-qubits) * [Visualize circuits](./visualize-circuits) +* [Visualize circuit timing](./visualize-circuit-timing) * [Fractional gates](./fractional-gates) * [Classical feedforward and control flow](./classical-feedforward-and-control-flow) * [Deferred timing resolution using stretch](./stretch) diff --git a/docs/guides/runtime-options-overview.mdx b/docs/guides/runtime-options-overview.mdx index e8c93c11bd9..ce8d3cd8186 100644 --- a/docs/guides/runtime-options-overview.mdx +++ b/docs/guides/runtime-options-overview.mdx @@ -66,6 +66,7 @@ The following table documents options from the latest version of `qiskit-ibm-run The total number of shots to use per circuit per configuration. **Choices**: Integer >= 0 + **Default**: None [`default_shots` API documentation](/docs/api/qiskit-ibm-runtime/options-estimator-options#default_shots) @@ -79,6 +80,7 @@ The total number of shots to use per circuit per configuration. The default precision to use for any PUB or `run()` call that does not specify one. **Choices**: Float > 0 + **Default**: 0.015625 (1 / sqrt(4096)) [`default_precision` API documentation](/docs/api/qiskit-ibm-runtime/options-estimator-options#default_precision) @@ -98,6 +100,7 @@ Control dynamical decoupling error mitigation settings. **Choices**: `True`, `False` + **Default**: `False` @@ -107,6 +110,7 @@ Control dynamical decoupling error mitigation settings. **Choices**: `middle`, `edges` + **Default**: `middle` @@ -154,6 +158,7 @@ Default: `False` Callable function that receives the `Job ID` and `Job result`. **Choices**: None + **Default**: None @@ -165,6 +170,7 @@ Callable function that receives the `Job ID` and `Job result`. List of tags. **Choices**: None + **Default**: None @@ -174,6 +180,7 @@ List of tags. **Choices**: DEBUG, INFO, WARNING, ERROR, CRITICAL + **Default**: WARNING @@ -183,6 +190,7 @@ List of tags. **Choices**: `True`, `False` + **Default**: `False` @@ -202,6 +210,7 @@ List of tags. Whether to reset the qubits to the ground state for each shot. **Choices**: `True`, `False` + **Default**: `True` @@ -212,6 +221,7 @@ Whether to reset the qubits to the ground state for each shot. The delay between a measurement and the subsequent quantum circuit. **Choices**: Value in the range supplied by `backend.rep_delay_range` + **Default**: Given by `backend.default_rep_delay` @@ -223,6 +233,7 @@ The delay between a measurement and the subsequent quantum circuit. ### `max_execution_time` **Choices**: Integer number of seconds in the range [1, 10800] + **Default**: 10800 (3 hours) [`max_execution_time` API documentation](/docs/api/qiskit-ibm-runtime/options-estimator-options#max_execution_time) @@ -251,6 +262,7 @@ Options for learning layer noise. **Choices**: list[int] of 2-10 values in the range [0, 200] + **Default**: `(0, 1, 2, 4, 16, 32)` @@ -261,6 +273,7 @@ Options for learning layer noise. **Choices**: None, Integer >= 1 + **Default**: `4` @@ -271,6 +284,7 @@ Options for learning layer noise. **Choices**: Integer >= 1 + **Default**: `32` @@ -281,6 +295,7 @@ Options for learning layer noise. **Choices**: Integer >= 1 + **Default**: `128` @@ -291,6 +306,7 @@ Options for learning layer noise. **Choices**: `NoiseLearnerResult`, `Sequence[LayerError]` + **Default**: None @@ -301,6 +317,7 @@ Options for learning layer noise. **Choices**: `True`, `False` + **Default**: `True` @@ -321,6 +338,7 @@ Options for measurement noise learning. **Choices**: Integer >= 1 + **Default**: `32` @@ -331,116 +349,112 @@ Options for measurement noise learning. **Choices**: Integer, `auto` + **Default**: `auto`
-#### `resilience.measure_noise_learning.pec_mitigation` +#### `resilience.pec_mitigation` **Choices**: `True`, `False` + **Default**: `False`
-#### `resilience.measure_noise_learning.pec` +#### `resilience.pec` Probabilistic error cancellation mitigation options. -[`resilience.measure_noise_learning.pec` API documentation](/docs/api/qiskit-ibm-runtime/options-pec-options) +[`resilience.pec` API documentation](/docs/api/qiskit-ibm-runtime/options-pec-options)
-##### `resilience.measure_noise_learning.pec.max_overhead` +##### `resilience.pec.max_overhead` **Choices**: `None`, Integer >= 1 -**Default**: `100` -
-
- -##### `resilience.measure_noise_learning.pec.max_overhead` - - -**Choices**: `None`, Integer >= 1 **Default**: `100`
-##### `resilience.measure_noise_learning.pec.noise_gain` +##### `resilience.pec.noise_gain` **Choices**: `auto`, float in the range [0, 1] + **Default**: `auto`
-#### `resilience.measure_noise_learning.zne_mitigation` +#### `resilience.zne_mitigation` **Choices**: `True`, `False` + **Default**: `False`
-#### `resilience.measure_noise_learning.zne` +#### `resilience.zne` -**Choices**: `True`, `False` -**Default**: `False` - -[`resilience.measure_noise_learning.zne` API documentation](/docs/api/qiskit-ibm-runtime/options-zne-options) +[`resilience.zne` API documentation](/docs/api/qiskit-ibm-runtime/options-zne-options)
-##### `resilience.measure_noise_learning.zne.amplifier` +##### `resilience.zne.amplifier` **Choices**: `gate_folding`, `gate_folding_front`, `gate_folding_back`, `pea` -**Default**: `gate_folding` + `gate_folding`
-##### `resilience.measure_noise_learning.zne.extrapolated_noise_factors` +##### `resilience.zne.extrapolated_noise_factors` **Choices**: List of floats + **Default**: `[0, *noise_factors]`
-##### `resilience.measure_noise_learning.zne.extrapolator` +##### `resilience.zne.extrapolator` **Choices**: One or more of: `exponential`, `linear`, `double_exponential`, `polynomial_degree_(1 <= k <= 7)`, `fallback` + **Default**: `(exponential, linear)`
-##### `resilience.measure_noise_learning.zne.noise_factors` +##### `resilience.zne.noise_factors` **Choices**: List of floats; each float >= 1 + **Default**: `(1, 1.5, 2)` for `PEA`, and `(1, 3, 5)` otherwise
@@ -456,6 +470,7 @@ Probabilistic error cancellation mitigation options. How much resilience to build against errors. Higher levels generate more accurate results at the expense of longer processing times. **Choices**: `0`, `1`, `2` + **Default**: `1` [`resilience_level` API documentation](/docs/api/qiskit-ibm-runtime/options-estimator-options#resilience_level) @@ -467,6 +482,7 @@ How much resilience to build against errors. Higher levels generate more accurat **Choices**: Integer + **Default**: None [`seed_estimator`](/docs/api/qiskit-ibm-runtime/options-estimator-options#seed_estimator) @@ -485,6 +501,7 @@ Options to pass when simulating a backend **Choices**: List of basis gate names to unroll to + **Default**: The set of all basis gates supported by [Qiskit Aer simulator](https://qiskit.github.io/qiskit-aer/stubs/qiskit_aer.AerSimulator.html) @@ -495,7 +512,8 @@ Options to pass when simulating a backend **Choices**: List of directed two-qubit interactions -**Default**: Full connectivity + +**Default**: None, which implies no connectivity constraints (full connectivity). @@ -505,6 +523,7 @@ Options to pass when simulating a backend **Choices**: [Qiskit Aer NoiseModel](/docs/guides/build-noise-models), or its representation + **Default**: None @@ -515,6 +534,7 @@ Options to pass when simulating a backend **Choices**: Integer + **Default**: None @@ -536,6 +556,7 @@ Twirling options **Choices**: True, False + **Default**: False @@ -546,6 +567,7 @@ Twirling options **Choices**: True, False + **Default**: True @@ -556,6 +578,7 @@ Twirling options **Choices**: `auto`, Integer >= 1 + **Default**: `auto` @@ -566,6 +589,7 @@ Twirling options **Choices**: `auto`, Integer >= 1 + **Default**: `auto` @@ -576,6 +600,7 @@ Twirling options **Choices**: `active`, `active-circuit`, `active-accum`, `all` + **Default**: `active-accum` @@ -589,15 +614,6 @@ Twirling options Experimental options, when available. -
- -#### `experimental.execution_path` - -**Choices**: `active`, `active-circuit`, `active-accum`, `all` -**Default**: None - - -
@@ -613,6 +629,7 @@ Experimental options, when available. The total number of shots to use per circuit per configuration. **Choices**: Integer >= 0 + **Default**: None [`default_shots` API documentation](/docs/api/qiskit-ibm-runtime/options-sampler-options#default_shots) @@ -632,6 +649,7 @@ Control dynamical decoupling error mitigation settings. **Choices**: `True`, `False` + **Default**: `False` @@ -641,6 +659,7 @@ Control dynamical decoupling error mitigation settings. **Choices**: `middle`, `edges` + **Default**: `middle` @@ -679,17 +698,6 @@ Default: `False` ### `environment` [`environment` API documentation](/docs/api/qiskit-ibm-runtime/options-sampler-options#environment) -
- -#### `environment.callback` - - -Callable function that receives the `Job ID` and `Job result`. - -**Choices**: None -**Default**: None -
-
#### `environment.job_tags` @@ -698,6 +706,7 @@ Callable function that receives the `Job ID` and `Job result`. List of tags. **Choices**: None + **Default**: None
@@ -707,6 +716,7 @@ List of tags. **Choices**: DEBUG, INFO, WARNING, ERROR, CRITICAL + **Default**: WARNING @@ -716,6 +726,7 @@ List of tags. **Choices**: `True`, `False` + **Default**: `False` @@ -734,6 +745,7 @@ List of tags. Whether to reset the qubits to the ground state for each shot. **Choices**: `True`, `False` + **Default**: `True` @@ -744,6 +756,7 @@ Whether to reset the qubits to the ground state for each shot. The delay between a measurement and the subsequent quantum circuit. **Choices**: Value in the range supplied by `backend.rep_delay_range` + **Default**: Given by `backend.default_rep_delay`
@@ -752,6 +765,7 @@ The delay between a measurement and the subsequent quantum circuit. **Choices**: `classified`, `kerneled`, `avg_kerneled` + **Default**: `classified`
@@ -763,6 +777,7 @@ The delay between a measurement and the subsequent quantum circuit. ### `max_execution_time` **Choices**: Integer number of seconds in the range [1, 10800] + **Default**: 10800 (3 hours) [`max_execution_time` API documentation](/docs/api/qiskit-ibm-runtime/options-sampler-options#max_execution_time) @@ -782,6 +797,7 @@ Options to pass when simulating a backend **Choices**: List of basis gate names to unroll to + **Default**: The set of all basis gates supported by [Qiskit Aer simulator](https://qiskit.github.io/qiskit-aer/stubs/qiskit_aer.AerSimulator.html) @@ -792,7 +808,8 @@ Options to pass when simulating a backend **Choices**: List of directed two-qubit interactions -**Default**: Full connectivity + +**Default**: None, which implies no connectivity constraints (full connectivity). @@ -802,6 +819,7 @@ Options to pass when simulating a backend **Choices**: [Qiskit Aer NoiseModel](/docs/guides/build-noise-models), or its representation + **Default**: None @@ -812,6 +830,7 @@ Options to pass when simulating a backend **Choices**: Integer + **Default**: None @@ -833,6 +852,7 @@ Twirling options **Choices**: True, False + **Default**: False @@ -843,7 +863,8 @@ Twirling options **Choices**: True, False -**Default**: True + +**Default**: False @@ -853,6 +874,7 @@ Twirling options **Choices**: `auto`, Integer >= 1 + **Default**: `auto` @@ -863,6 +885,7 @@ Twirling options **Choices**: `auto`, Integer >= 1 + **Default**: `auto` @@ -873,6 +896,7 @@ Twirling options **Choices**: `active`, `active-circuit`, `active-accum`, `all` + **Default**: `active-accum` diff --git a/docs/guides/save-credentials.mdx b/docs/guides/save-credentials.mdx index ed9a2551751..ab9807f9859 100644 --- a/docs/guides/save-credentials.mdx +++ b/docs/guides/save-credentials.mdx @@ -54,7 +54,8 @@ If you don't provide an instance CRN and pass these credentials to Qiskit Runtim QiskitRuntimeService.save_account( token="", # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard name="", # Optional - plans_preference="", # Optional + plans_preference="", # Optional region="", # Optional tags="", # Optional set_as_default=True, # Optional diff --git a/docs/guides/scheduler_timing.html b/docs/guides/scheduler_timing.html new file mode 100644 index 00000000000..38e0d454e04 --- /dev/null +++ b/docs/guides/scheduler_timing.html @@ -0,0 +1,3888 @@ + + + +
+
+ + \ No newline at end of file diff --git a/docs/guides/stretch.mdx b/docs/guides/stretch.mdx index 65f5c8e653f..bfda92140a6 100644 --- a/docs/guides/stretch.mdx +++ b/docs/guides/stretch.mdx @@ -95,6 +95,30 @@ qc.barrier() Stretch resolution equation: $a + 8 + a + 8 + a + 8 = 100 = 3*a + 24$
+## View stretch values in Qiskit Runtime + +When using a Qiskit Runtime primitive, you can view the stretch values. To view this data, enable its retrieval, then access the data directly from the metadata as follows: + +```python +# enable stretch value retrieval +sampler.options.experimental = { + "execution": { + "stretch_values": True, + }, +} + +# Access the stretch values from the metadata +job_result: SamplerPubResult = job.result() + circuit_stretch_values = job_result[0].metadata["compilation"]["stretch_values"] +``` + +### Visualize the stretch values + +You can display the output figure, save it to a file, or both. + +- Run `fig.show()` display the figure. +- Run `fig.write_image("")` download the figure. For example: `fig.write_html("scheduler_timing.html")` or `fig.write_image("scheduler_timing.png")`. + ## Qiskit Runtime limitations Support for `stretch` in Qiskit Runtime is currently experimental and has the following constraints: diff --git a/docs/guides/visualize-circuit-timing.ipynb b/docs/guides/visualize-circuit-timing.ipynb new file mode 100644 index 00000000000..7a770261f1d --- /dev/null +++ b/docs/guides/visualize-circuit-timing.ipynb @@ -0,0 +1,8321 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "{/* cspell:ignore mactex, backgroundcolor, lightgreen */}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualize circuit timing" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "version-info" + ] + }, + "source": [ + "
\n", + "Package versions\n", + "\n", + "The code on this page was developed using the following requirements.\n", + "We recommend using these versions or newer.\n", + "\n", + "```\n", + "qiskit[all]~=2.1.1\n", + "```\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition to [visualizing instructions on a circuit](/docs/guides/visualize-circuits) you might want to use the Qiskit [`timeline_drawer`](/docs/api/qiskit/qiskit.visualization.timeline_drawer) method, which lets you visualize a circuit's scheduling. This visualization could help you to quickly spot idling time on qubits, for example.\n", + "\n", + "\n", + "- This is an experimental function. It is in preview release status and is therefore subject to change.\n", + "- This function only applies to Sampler jobs.\n", + "\n", + "\n", + "## Examples\n", + "\n", + "To visualize a scheduled circuit program, you can call this function with a set of control arguments. Most of the output image's appearance can be modified by a stylesheet, but this is not required.\n", + "\n", + "### Draw with the default stylesheet" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ACBHhLYAAAAAADkitAUAAAAAyBGhLQAAAABAjghtAQCodyZNmhRFRUUxbNiwer3N2vj+978fXbt2jaVLl65x2cceeyx7TqNGjVqrxx47dmw0adIk3nzzzQ3QUgCAhktoCwCwHt5555049dRTY6eddooWLVpEu3bt4jOf+UycdNJJ8eijj27Ubadw8K677tqo26BqMJte95deeik+jSZOnBjDhw+P//u//8vC1dpIzz29Bum1qOyoo46K3XbbLQuGAQCoveL1WBcAoEF7/vnn48ADD4ySkpL4xje+EbvsskssWrQo62X44IMPRqtWraJfv34bbfsXX3xxFg4PHDhwo22DilJQmV73Ll26xB577FFhXufOnbO/f3Fxfg+xf/azn0Xr1q3jxBNPrPVjpNA2vQZ9+/bNXofKzjnnnOx9+e9//zv7TAAAsO7ye0QJAJBzKbhauHBhFmL17Nmzyvzp06fXSbuoG6mMQLNmzSKv5s2bF7fcckt861vfyk40bCxHH310nH766XHjjTfGr371q422HQCA+kx5BACAWko9atu3b19tYJuUlpZm96l26BZbbBGf//znq13u5z//eRb4PfHEE9nvixcvzi4/33HHHbOSC23bts0uOT///PMr1E5NbrrppuznstuqHn744ejfv3+2fgoTd9999yxIqyz1lky9Jl9++eU45JBDYrPNNostt9wyvvvd78by5cuz9px33nmxzTbbZI9zwAEHxH/+85+1fp1SeH322WfH9ttvH02bNs0e+9BDD42HHnqo/JL69DxTqFjZc889lz2vSy65pML0O+64I2tzem5p3fRapW2sTZ3WP//5z7H//vtnPaHTuvvss0/cfvvta1wv1XUt6zk9ePDg8tc8taOmmrarThszZkzWO7d58+bRrVu3GDlyZLbMu+++G1/5yldi8803z9qUesHOnz+/yvanTZuWhaHbbbddVtpg6623zkpzzJgxI9bGX//611iwYEF84QtfqLEe7Z577pn9jTt16hT/+7//G8uWLauwTHoe6bkn6bUoew1OPvnk8mXS+6dPnz5r9ZoCAFA9PW0BAGpphx12iDfeeCP+8pe/ZL0La5ICtnS5+FVXXZUtnwLGVY0YMSJ69OiRhaHJkCFDsmmp5ML//M//ZMFpCogfeeSRbH4KgG+++eb4+te/noVjKbir7De/+U185zvfiX333Td+9KMfRcuWLbOQNIV+b7/9dhYUr+q9997LgtTjjjsuCxBTeYdf/OIX2aX+6TL3dNn/BRdcEB9++GFceeWVWUmGFNw2arT6PgAptExh9QcffJA9n7333jsLDseNG5eFymmb3/72t+Puu++OP/7xj3HaaadVWP/3v/99to1vfvOb5dPS8/npT38aO++8cwwdOjQ6duyYPacU5KZwd3W1Wi+88MK49NJL47DDDosf//jH2WPfeeedceyxx8a1116bvfY1SX+fH/7wh9m202ueXvtkq622ijW59957s8D8jDPOyMLZ9LzSc0ptTY950EEHZY+bQur0t0/B6e9+97vy9VOwu99++2WhdOopm957b731Vtxwww1Z7eRUqqNNmzarbcPjjz+e3ffq1avKvPQaHHPMMVmAn+rdpr97CpXvu+++Csul93kKj9P7K7U71W9OUntWldr6wAMPxOuvv57VewYAYB0VAAColaeffrpQUlJSSIdU3bt3LwwePLhw/fXXF1577bUqy77xxhvZcueff36F6U899VQ2/fLLLy+f1q5du8Lhhx++xu2n9U466aQq06dOnVpo2rRpYdCgQVXmnX322YVGjRoV3n777fJpnTt3zh5rzJgxFZbda6+9CkVFRYUvfelLhZUrV5ZPHz58eLb8/fffv8Y2pudR07IrVqzI7pcvX17o1KlToVevXhXmL1iwoNC6desKr8X48eOzx+vXr19h0aJFFZZPbSxr58SJE7PlLrroovL5L7zwQjbtBz/4QZW2HHXUUYVWrVoV5s2bt9rn8+ijj2aPMXLkyCrzqttm2bQWLVoUJk2aVD59xowZ2d8ovb5XXXVVhcf58pe/nL2v5s+fXz4t/Q222GKLwpQpUyos+9xzzxUaN25cYZs1OeCAA7L3VmVlr3/79u0LM2fOLJ8+Z86cwnbbbVfl+aaf07T0WtTk5ptvzpa5/fbb19guAACqUh4BAKCWUm/CF154IetFO3fu3KxnYupJmXqApl6Z77zzTvmyqSdtGrTsD3/4Q9ZztkzqcZl6NabHKJN6TKbera+++mqt2pUuS1+yZEnWIzP1jF31duSRR8bKlSuzXq6rSqUPUm/TVaUSAikbPuussyqUXijrYZp6/67OrFmz4v777896tQ4YMKDK/LJeuo0bN856naZepq+88kqF55FKJqTnUSbVZE0u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", + "text/plain": [ + "
" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit.visualization.timeline import draw\n", + "from qiskit.providers.fake_provider import GenericBackendV2\n", + "from qiskit.transpiler import generate_preset_pass_manager\n", + "\n", + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.cx(0, 1)\n", + "\n", + "backend = GenericBackendV2(5)\n", + "\n", + "pm = generate_preset_pass_manager(backend=backend, optimization_level=1)\n", + "isa_circuit = pm.run(qc)\n", + "\n", + "draw(isa_circuit, target=backend.target)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Draw with a stylesheet suited for program debugging" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AAAAsuXw4cPm6NGjAbdt377dFClSJGbLBACIXIUKFUwsUWkLAAAAAAAAAB5CaAsAAAAAAAAAHuKZ9ggAAACIDcdxzJIlS9JdzgsAiNzx48fN/v37A25bvHixKViwYMyWCQDyi2bNmsVNuxlCWwAAgDincGHlypWxXgwAyLfWrFkT60UAgHyhUqVKpkaNGiYe0B4BAAAgzv3777+xXgQAAAAgS//G0X4roS0AAECc27dvX6wXAQAAAMjS3r17TbwgtAUAAIhzwb0XAQAAAC86ePCgiReEtgAAAHEunnZ+AQAAcPI6cOCAiReEtgAAAHEuLS0t1osAAAAAZCktjvZbCW0BAADiXDzt/AIAAODkdejQIXPixAkTDwhtAQAA4px2fgEAAICTweHDh008ILQFAACIc4S2AAAAOFkcipN9V0JbAACAOHbs2DH7BQAAAJwMDsdJpW2h7M5g06ZNZty4cWbevHn251NOOcXUqFHDdO3a1QwaNMiULFkyZ5YUAAAAOS5ednoBICe89957ZtWqVfbncuXKmQEDBsR0eb7//nszf/583/+HDh1qihUr5rnlzMnXBgCH4qTSNluh7TfffGO6detmdu/ebU4//XQb1GogizVr1pjRo0ebyy67zDRq1CjnlhYAAAA5Kl52egGEb8WKFeb999+3P/ft29ekpKQE3O84jpkwYYLZu3evqVWrlundu7eJJ0lJSebiiy82RYsWDTgB9t1335nNmzebv/76y25bdTzcuHHjiOcfybxq1qxpl+fXX3+1x+FZLads377dLFy40GzZssXs37/fJCYm2mC3devWpk6dOgHT7tq1y3z55Zfmzz//tMf6pUqVMmeffbZp1aqVKVy4cMC0umpjwYIFNizWMp922mmmQ4cO5owzzsjx1wYgvh2Kk/3XqEPbf/75x1xxxRU2sFWl7b333msKFCgQcFasUqVKObWcAAAAyAVU2gLISKFChcxPP/2ULrTduHGjDWwLFixo4pFCzoYNGwbcdvDgQfPVV1/ZULNChQp2HUUrknkpbNWXjs+Dg81Qyyk6hte2XwVWJUqUMEePHjW//PKLef31182ll15qmjZtaqfbs2ePefHFF02RIkVM8+bN7VW1ClsV+G7dutVce+21AfOdM2eOnU/Lli1N2bJlzcqVK81rr71m+vTp4/sbyqnXBiC+HTlyxMSDqEPbl156yezYscN06tTJDBkyJN395557ru/nZcuWmYkTJ9ozauvXrzcjRowwjzzySPRLDQAAgBxBaAsgI6qiVQjXuXPngIBWQW7FihVtAHeyH/QHV4tGS+Hn4MGD7XdVkCrs9MK8Qqldu7b98qdQdsqUKbb4yg1t3YrZm266yZQvX97epvtUaa37VHmrIFcU5q5evdpcdNFFtmJXFBhPmjTJfPbZZ+aWW27Jk9cGID4cjpP916hD288//9x+79evX5bTLlq0yCxevNicd955ZufOndE+JQAAAHJYvOz0Aohc/fr17aXpGzZssAGuewm8gtzzzz/f/PDDD+keowpcXU7/22+/2cBPFZcq6GnSpElApee3335rUlNTbTWnKkKrV69uA78yZcoEbJ80L1VZ6jJ+VXyqOvPCCy/0XdWp3q2q1tR4Kv50mb4qOtW2z////fv3N19//bX5/fffTenSpc3tt98e9nJnVZWsIDIn5OS8wqWrZlX9qiA1+PMhuI9s8eLFTUJCQkCQr78J3XbOOef4btPvVevviy++sL9nzT8Wrw1A/nOI9giZ06Bj4t+fJiN33XWXufvuu+3P6n0LAAAAb4iXy8sARE6hZtWqVW1lrRvaKuxUmKdANzi0VbCqKzLdyk31I9X0H3zwgX2MezWmgkEdT2oeGrhaIe7SpUvN9OnT7YBZbvXr3LlzbRioeekyeVX2qreqCoGibcX31ltv2UD2ggsusBWjkSx3ftz+qzWCXuPatWttYK3fiUvH7irA0npo166dXS/6velK2hYtWgRUKW/bts0kJyen659buXJl3/0KbQEgJxyJk/3XbA1EFi7/XrcAAADwDiptAWRGg07pKkuFe6qc/PHHH21/UoWtwVRReeLECVvNqoBPmjVrZt5++23bB1WX1mseujS/Xr16AY/VbVOnTrWVvW4f1nXr1tlKTQ2mlVM0ONaVV14Z1XLnN/PnzzfLly+3P6tKtm7duuaSSy7x3a+gvn379nYAcoW6rjZt2tjQ29++fftCVtCqKte9HwByyuE42X+NOk3VGVdRj1oAAACcnHSgDgAZUbiqlggKUHWQrO8KcoOpalWBa506dezPBw4c8H3p6kw9VoNXiX8Aevz4cVtBq+pXVWm604j+r6pctS7IKW6/1miWO7/RgGHXX3+96d69u6lZs6YNrvX7CK62VkjftWtXc/XV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NGAavQ69dtG6cNfBjTfe6JtGfz9t2rQJa50CAAAgPSptAQAAsuGMM84wa9euNe+++66tLsyIAjZdLj5+/Hg7vQJGfy+//LKpXbu2DUNlwIAB9ja1XLj33nttcKqA+Msvv7T3KwCeOXOmuf766204puAu2AsvvGBuv/1207JlSzNixAhTrFgxG5Iq9Fu/fr0Niv1t3rzZBqk9e/a0AaLaOzz55JP2Un9d5q7L/ocNG2Z27txpnnjiCduSQcFtgQKZ1wEotFRY/ffff9vX07RpUxscLl682IbKes5bb73VfPDBB+b11183/fr1C3j81KlT7XPcdNNNvtv0eh599FFz1llnmUGDBpmKFSva16QgV+FuZr1aR44cacaMGWM6depkHn74YTvv9957z1x11VXm2Weftes+I/r9DB8+3D631rnWvZx22mkmK3PnzrWBef/+/W04q9el16Rl1Tw7dOhg56uQWr97BacvvfSS7/EKds8991wbSqtSVn97v//+u5k8ebLtnaxWHaVKlcp0Gb766iv7vVmzZunu0zq44oorbICvfrf6vStU/uijjwKm09+5wmP9fWm51b9ZtDz+tKzz5883a9assf2eAQAAEAEHAAAAUfvuu++cxMRER7tVtWrVcvr27etMmjTJ+eWXX9JNu3btWjvd0KFDA27/9ttv7e1jx4713VamTBmnc+fOWT6/HtenT590t2/ZssUpUqSIc+2116a7b+DAgU6BAgWc9evX+25LSUmx85o9e3bAtE2aNHESEhKcbt26OSdOnPDd/vTTT9vp582bl+Uy6nVkNO3x48ft92PHjjlVq1Z1mjVrFnD/gQMHnJIlSwasix9++MHOr3379k5aWlrA9FpGdzlTU1PtdKNGjfLdv3z5cnvb/fffn25ZLrvsMqdEiRLO3r17M309CxYssPOYNm1auvtCPad7W1JSkrNx40bf7du3b7e/I63f8ePHB8ynR48e9u9q3759vtv0OyhXrpyzadOmgGmXLl3qFCxYMOA5M3L++efbv61g7vpPTk52duzY4bt99+7dTrVq1dK9Xv2s27QuMjJz5kw7zdtvv53lcgEAACAQ7REAAACyQdWEy5cvt1W0e/bssZWJqqRUBaiqMjds2OCbVpW0GrRsxowZtnLWpYpLVTVqHi5VTKq6dfXq1VEtly5LP3z4sK3IVGWs/1fXrl3NiRMnbJWrP7U+ULWpP7UQUDZ81113BbRecCtMVf2bmX/++cfMmzfPVrVefPHF6e53q3QLFixoq05VZfrTTz8FvA61TNDrcKknqzz22GPp+seGahHhT4/V/VrXweulW7dutiXB999/b3KDKpM1UJlL1dKquNY6CK7u1fpVWwJVKYv+tlSpq2XUa/ZfblXGqtWCKqOzsmPHDlvlG0x/w5s2bbJtD0499dSAv0NVa0dDbUMk3NYNAAAA+P8IbQEAALJJvWbV61SX/ytkU49ZhW7ffPON7dXq32NVl9RrOgVwopBQfU4vvfTSgEvsn3rqKfPvv//aeeuy81tuucX2G1XYGg6336z60yoc9P9SOwLRcvirXr16uvmUKVMm5H3u7bt27cp0OXT5vkJf9UnNioJZhbcKsV36Wf1vFVa6FBQreM2oj3BW60XLo8v1g9eLGwwHr5econ6+wbQe1dpBfX6Db/dfv2qpod+91kfwcutL94ez3Fpv/1ugHcg9uRCqjYFOQETDfZ7MQnQAAACERk9bAACAHKRKSvVtdXvNLlq0yCxZssRWrIp6hmqwLIVvqrzUgFjq76pQ1p/CXgXAGjhKfUhVFavHaJ76ObOerf6Bmap6FQqGEyIqMM1IRveFCgCjpYGvVJH76quvmscff9z88ccfdmA2DYCWmJgYUUVtRrS8etwnn3yS4WuqV6+eyQ0ZPV9m691dv+53DVDmX5HtT4ObZUUBrwabywuqsnafEwAAAJEhtAUAAMgFCgZbtGhhQ9u//vrLd7sqKhXqTpw40WzZssUGsWpLoLAymC5jV0inL4V2GgRMYaYqboPbGASrVauW/a5L3VVtGyu6bF/rYuXKlWFNr0pkDXw1Z84cs2LFCnubf2sEt82EQleFj82bN49oebRe1K6hWrVqvgG0IhWLylF3PapqOzu/z/r169uTAGqr4N8GwQ3wNWhYsF9++SWqdaAqa/c5AQAAEBnaIwAAAGTDZ599FtCf1pWWlubrMRp8efmtt95qjh8/bu677z6zePFic+ONNwZUW+q+3bt3pwvJ3BYDbgWjFC9ePOD/rquvvtoGxKNGjbLLEkw9UtXzNrcpeO7cubMNWYN76Iaq1O3SpYupVKmSmTJlim0z0bp163SX7Pfq1ct+Hz58eEDriYzm6U8V0O5jtZ6DhdNiQOtcQq333KL+sJdccol599137d9MqNesfrVZadeunf0ePI9zzjnHVKlSxfZkVqDrUj/h559/Pqp1oOdQyw/17QUAAEBkqLQFAADIhkGDBtm+o+q5qv6zSUlJdkCnWbNmmXXr1tmqWt3uTxWeapegNgAKYzUAlz/1uVVLA81TQa16uqampprJkyfbXqcaSMzVsmVLG4aOHTvWVo9qftdcc40N4DS92i7o+RRWqnWDgj0N9KVKVlVQahCr3Pbss8+aVq1a2fBWl/YrIFSQ/MMPP9jn17K73AHJHnnkEfv/Rx99NN38VF2rwFuPa9KkienZs6epUKGCXUcauEztKEqXLh1yWZo1a2ZGjx5tvxo1amQrlhUSb9261Q7GpXYUoYJgfwrhS5QoYSZNmmR/33ou/Y46dOhgcpN+n/q70QB3+rvS34b63KofraqvdZteV2ZU0a1l1+tUH2X/9T5hwgQb9mv96sSCBsd7+eWXbWD8559/pluPGkBtzJgxtvdysWLFbN9jVZfL/v37bU/n4L9tAAAAhMkBAABA1ObPn+/079/fadCggZOcnOwULFjQKVu2rNOuXTtn6tSpzvHjx0M+bsaMGSoHdTp06JDuvsOHDzvDhg1zmjVrZudVuHBhJyUlxenbt6+zbt26gGn1/4suusgpUaKEnV/w7t23337rdO/e3SlXrpyTmJjoVKxY0S7bE0884aSlpfmm0/zbtm2bbllGjRpl55mamhpwu/6v23V/ODZv3uz069fPqVq1ql2O8uXL2+X+/PPP0027ceNGp0CBAvY17d+/P8N5zpo1y2nVqpVTvHhxJykpyalTp45z99132/WX1TLOnTvX6dixo1OmTBm7fqtUqeJ06tTJmTx5cliv56OPPnIaN27sFClSxD6Hu+5CPWdmy6HHad0HmzZtmn3MggULAm7fsWOHM2TIEKdWrVr2uUuVKuXUr1/fGThwoPPzzz+Htex33HGH/bty15O/d955x2nYsKFvnYwcOdL59NNP7bJomfxNnz7dqVu3rv196v4+ffoE3Kfbfvrpp7CWCQAAAIES9E+4AS8AAAByxuzZs22FqCpyr7322lgvjqeo6lWDkqmXrdokIGdpgDu1nFAFdPAAeDlFFdCqolY7BwAAAESOnrYAAAAx8Nxzz9mBoC6//PJYL4rnqA2A+s1qUDLkPIWp99xzj21BkVUriGio9cbq1asD2l4AAAAgMlTaAgAA5JHt27ebL774wvb6VDD52GOPmWHDhsV6sTzjjTfesL1TNXha27Ztzbx582K9SAAAAEBMENoCAADkkYULF5r27dvbgas0WNjEiRNNYmJirBfLMzSIWtGiRU2bNm3MtGnTTOXKlWO9SAAAAEBMENoCAAAAAAAAgIfQ0xYAAAAAAAAAPITQFgAAAAAAAAA8hNAWAAAAAAAAADyE0BYAAAAAAAAAPITQFgAAAAAAAAA8hNAWAAAAAAAAADyE0BYAAAAAAAAAPITQFgAAAAAAAACMd/w/u7m4lsJaN0gAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit.visualization.timeline import draw, IQXDebugging\n", + "from qiskit.providers.fake_provider import GenericBackendV2\n", + "from qiskit.transpiler import generate_preset_pass_manager\n", + "\n", + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.cx(0, 1)\n", + "qc.measure_all()\n", + "\n", + "backend = GenericBackendV2(5)\n", + "pm = generate_preset_pass_manager(backend=backend, optimization_level=1)\n", + "isa_circuit = pm.run(qc)\n", + "draw(isa_circuit, style=IQXDebugging(), target=backend.target)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can create custom generator or layout functions and update an existing stylesheet with the custom functions. This way, you can control the most of the appearance of the output image without modifying the codebase of the scheduled circuit drawer. See the [`timeline_drawer`](/docs/api/qiskit/qiskit.visualization.timeline_drawer) API reference for more examples." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Qiskit Runtime support\n", + "\n", + "While the timeline drawer built in to Qiskit is useful for static circuits, it might not accurately reflect the timing of [dynamic circuits](/docs/guides/classical-feedforward-and-control-flow) because of implicit operations such as broadcasting and branch determination. As part of dynamic circuit support, Qiskit Runtime returns the accurate circuit timing information inside the job results when requested." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Enable timing data retrieval\n", + "\n", + "To enable timing data retrieval, set the experimental `scheduler_timing` flag to `True` when running the primitive job." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "management.get:WARNING:2025-10-10 13:16:20,443: Loading default saved account\n", + "qiskit_runtime_service.__init__:WARNING:2025-10-10 13:16:27,865: Instance was not set at service instantiation. Free and trial plan instances will be prioritized. Based on the following filters: (tags: None, region: us-east, eu-de), and available plans: (premium, internal), the available account instances are: Documentation premium fleet, Documentation internal fleet, Documentation premium fleet, Documentation internal fleet. If you need a specific instance set it explicitly either by using a saved account with a saved default instance or passing it in directly to QiskitRuntimeService().\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:29,034: Loading instance: Documentation premium fleet, plan: premium\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:30,879: Loading instance: Documentation internal fleet, plan: internal\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:31,477: Loading instance: Documentation premium fleet, plan: premium\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:33,163: Loading instance: Documentation internal fleet, plan: internal\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:40,307: Using instance: Documentation premium fleet, plan: premium\n" + ] + } + ], + "source": [ + "from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2\n", + "\n", + "service = QiskitRuntimeService()\n", + "backend = service.least_busy(operational=True, simulator=False)\n", + "\n", + "pm = generate_preset_pass_manager(backend=backend, optimization_level=1)\n", + "isa_circuit = pm.run(qc)\n", + "\n", + "sampler = SamplerV2(backend)\n", + "sampler.options.experimental = {\n", + " \"execution\": {\n", + " \"scheduler_timing\": True,\n", + " },\n", + "}\n", + "\n", + "sampler_job = sampler.run([isa_circuit])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Access the circuit timing data\n", + "\n", + "When requested, the circuit timing data is returned in the job result metadata, under `[\"compilation\"][\"scheduler_timing\"][\"timing\"]`. This field contains the raw timing information. To display the timing information, use the built-in visualization tool to display it, as described in the following section.\n", + "\n", + "Use the following code to access the circuit timing data:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "job_result = sampler_job.result()\n", + "circuit_schedule = job_result[0].metadata[\"compilation\"][\"scheduler_timing\"]\n", + "circuit_schedule_timing = circuit_schedule[\"timing\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Understand the raw timing data\n", + "\n", + "While visualizing the circuit timing data by using the `draw_circuit_schedule_timing` method is the most common use case, it might be useful to understand the structure of the raw timing data returned. This could help you, for example, to extract information programmatically.\n", + "\n", + "The timing data returned in `[\"compilation\"][\"scheduler_timing\"][\"timing\"]` is a list of strings. Each string represents a single instruction on some channel and is comma separated into the following data types:\n", + "\n", + "- `Branch` - Determines whether the instruction is in a control flow (then / else) or a main branch\n", + "- `Instruction` - The gate and the qubit to operate on\n", + "- `Channel` - The channel that is being assigned with the instruction (Qubit x / AWGRx_y / ...). Arbitrary Wave Generator Readout (AWGR) is used for readout channels communication for measuring qubits, as opposed to drive channels, which are for driving the qubits. The `X` and `Y` arguments correspond to the readout instrument ID and the qubit number, respectively.\n", + "- `T0` - The instruction start time within the complete schedule\n", + "- `Duration` - The instruction's duration\n", + "- `Pulse` - The type of pulse operation being used\n", + "\n", + "\n", + "Example:\n", + "\n", + "```python\n", + "main,barrier,Qubit 0,7,0,barrier # A barrier on the main branch on qubit 0 at time 7 with 0 duration\n", + "main,reset_0,Qubit 0,7,64,play # A reset instruction on the main branch on qubit 0 at time 7 with duration 64 and a play operation\n", + "...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualize the timings\n", + "\n", + "To visualize the timings, you first need to convert the result metadata to `fig` by using the `draw_circuit_schedule_timing` (**link to API reference when available**) method. This method returns a `plotly` figure, which you can display directly, save to a file, or both. For more information about the `plotly` commands to use, see [`fig.show()`](https://plotly.com/python-api-reference/generated/plotly.io.show.html) and [`fig.write_image(\"\")`.](https://plotly.com/python-api-reference/generated/plotly.io.write_image.html)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_ibm_runtime.visualization import draw_circuit_schedule_timing\n", + "\n", + "# Create a figure from the metadata\n", + "fig = draw_circuit_schedule_timing(\n", + " circuit_schedule=circuit_schedule_timing,\n", + " included_channels=None,\n", + " filter_readout_channels=False,\n", + " filter_barriers=False,\n", + " width=1000,\n", + ")\n", + "\n", + "# Display the figure\n", + "fig.show(renderer=\"notebook\")\n", + "\n", + "# Save to a file\n", + "fig.write_html(\"scheduler_timing.html\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Understand the generated figure\n", + "\n", + "The image of the circuit timing data output by `draw_circuit_schedule_timing` conveys the following information:\n", + "\n", + "- X axis is time in units of _dt_ seconds, where 1 dt = 1 scheduling cycle.\n", + "- Y axis is the channel (think of channels as instruments that emit pulses).\n", + " - `Receive channel` is the only channel that isn't an instrument by itself. It is an instruction played on all channels that are part of a communication procedure with the hub at that time.\n", + " - `Qubit x` is the drive channel for qubit x.\n", + " - `AWGRx_y` (arbitrary wave generator readout) is used for readout channels communication for measuring qubits. The x and y arguments correspond to the readout instrument ID and the qubit number, respectively.\n", + " - `Hub` controls broadcasting.\n", + "\n", + "Additionally, each instruction has the format of *X_Y*, where *X* is the name of the instruction and *Y* is the pulse type. A `play` type applies control pulses, and a `capture` records the qubit's state." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### End-to-end example\n", + "\n", + "This example shows you how to enable the option, get it from the metadata, display it, and save it to a file.\n", + "\n", + "First, set up the environment, define the circuits and convert them to ISA circuits, and define and run the jobs." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "management.get:WARNING:2025-10-10 13:16:49,033: Loading default saved account\n", + "qiskit_runtime_service.__init__:WARNING:2025-10-10 13:16:55,464: Instance was not set at service instantiation. Free and trial plan instances will be prioritized. Based on the following filters: (tags: None, region: us-east, eu-de), and available plans: (premium, internal), the available account instances are: Documentation premium fleet, Documentation internal fleet, Documentation premium fleet, Documentation internal fleet. If you need a specific instance set it explicitly either by using a saved account with a saved default instance or passing it in directly to QiskitRuntimeService().\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:56,781: Loading instance: Documentation premium fleet, plan: premium\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:58,681: Loading instance: Documentation internal fleet, plan: internal\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:16:59,473: Loading instance: Documentation premium fleet, plan: premium\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:17:01,483: Loading instance: Documentation internal fleet, plan: internal\n", + "qiskit_runtime_service.backends:WARNING:2025-10-10 13:17:07,156: Using instance: Documentation premium fleet, plan: premium\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + ">>> Job ID: d3kkr9a9vnss73d7h770 (QUEUED)\n", + ">>> Job: d3kkr9a9vnss73d7h770 finished with:\n", + "PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray()), metadata={'circuit_metadata': {}, 'compilation': {'scheduler_timing': {'timing': 'main,barrier,Qubit 0,0,0,barrier\\nmain,barrier,Qubit 1,0,0,barrier\\nmain,INIT_0,Qubit 0,80,20000,play\\nmain,INIT_0,Qubit 0,72,20000,play\\nmain,INIT_1,Qubit 1,80,20000,play\\nmain,INIT_1,Qubit 1,72,20000,play\\nmain,barrier,Qubit 0,20080,0,barrier\\nmain,barrier,Qubit 1,20080,0,barrier\\nmain,rz_0,Qubit 1,20080,0,shift_phase\\nmain,rz_0,Qubit 14,20080,0,shift_phase\\nmain,rz_0,Qubit 0,20080,0,shift_phase\\nmain,sx_0,Qubit 0,20080,120,play\\nmain,sx_0,Qubit 1,20200,0,shift_phase\\nmain,sx_0,Qubit 14,20200,0,shift_phase\\nmain,sx_0,Qubit 0,20200,0,shift_phase\\nmain,rz_1,Qubit 2,20080,0,shift_phase\\nmain,rz_1,Qubit 1,20080,0,shift_phase\\nmain,rz_1,Qubit 0,20080,0,shift_phase\\nmain,sx_1,Qubit 1,20080,120,play\\nmain,sx_1,Qubit 2,20200,0,shift_phase\\nmain,sx_1,Qubit 1,20200,0,shift_phase\\nmain,sx_1,Qubit 0,20200,0,shift_phase\\nmain,rz_1,Qubit 2,20200,0,shift_phase\\nmain,rz_1,Qubit 1,20200,0,shift_phase\\nmain,rz_1,Qubit 0,20200,0,shift_phase\\nmain,ecr_1_0,Qubit 0,20200,600,play\\nmain,ecr_1_0,Qubit 1,20200,600,play\\nmain,ecr_1_0,Qubit 1,20800,120,play\\nmain,ecr_1_0,Qubit 0,20920,600,play\\nmain,ecr_1_0,Qubit 1,20920,600,play\\nmain,rz_0,Qubit 1,21520,0,shift_phase\\nmain,rz_0,Qubit 14,21520,0,shift_phase\\nmain,rz_0,Qubit 0,21520,0,shift_phase\\nmain,sx_0,Qubit 0,21520,120,play\\nmain,sx_0,Qubit 1,21640,0,shift_phase\\nmain,sx_0,Qubit 14,21640,0,shift_phase\\nmain,sx_0,Qubit 0,21640,0,shift_phase\\nmain,rz_0,Qubit 1,21640,0,shift_phase\\nmain,rz_0,Qubit 14,21640,0,shift_phase\\nmain,rz_0,Qubit 0,21640,0,shift_phase\\nmain,rz_1,Qubit 2,21520,0,shift_phase\\nmain,rz_1,Qubit 1,21520,0,shift_phase\\nmain,rz_1,Qubit 0,21520,0,shift_phase\\nmain,sx_1,Qubit 1,21520,120,play\\nmain,sx_1,Qubit 2,21640,0,shift_phase\\nmain,sx_1,Qubit 1,21640,0,shift_phase\\nmain,sx_1,Qubit 0,21640,0,shift_phase\\nmain,rz_1,Qubit 2,21640,0,shift_phase\\nmain,rz_1,Qubit 1,21640,0,shift_phase\\nmain,rz_1,Qubit 0,21640,0,shift_phase\\nmain,barrier,Qubit 0,21640,0,barrier\\nmain,barrier,Qubit 1,21640,0,barrier\\nmain,measure_0,Qubit 0,21640,1440,play\\nmain,measure_0,AWGRM_4,22528,1600,capture\\nmain,measure_1,Qubit 1,21640,1440,play\\nmain,measure_1,AWGRC_8,22528,1600,capture\\n'}, 'stretch_values': None}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan()])}, 'version': 2})\n" + ] + } + ], + "source": [ + "from qiskit_ibm_runtime import SamplerV2\n", + "from qiskit.circuit import QuantumCircuit\n", + "\n", + "service = QiskitRuntimeService()\n", + "backend = service.least_busy(operational=True, simulator=False)\n", + "\n", + "# Create a Bell circuit\n", + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.cx(0, 1)\n", + "qc.measure_all()\n", + "\n", + "qc.draw()\n", + "\n", + "# Convert to an ISA circuit for the given backend\n", + "\n", + "pm = generate_preset_pass_manager(backend=backend, optimization_level=1)\n", + "isa_circuit = pm.run(qc)\n", + "\n", + "# Generate samplers for backend targets\n", + "sampler = SamplerV2(backend)\n", + "sampler.options.experimental = {\"execution\": {\"scheduler_timing\": True}}\n", + "\n", + "# Submit jobs\n", + "sampler_job = sampler.run([isa_circuit])\n", + "\n", + "print(\n", + " f\">>> {' Job ID:':<10} {sampler_job.job_id()} ({sampler_job.status()})\"\n", + ")\n", + "\n", + "result = sampler_job.result()\n", + "print(f\">>> {' Job:':<10} {sampler_job.job_id()} finished with:\\n{result}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, get the circuit schedule timing:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'main,barrier,Qubit 0,0,0,barrier\\nmain,barrier,Qubit 1,0,0,barrier\\nmain,INIT_0,Qubit 0,80,20000,play\\nmain,INIT_0,Qubit 0,72,20000,play\\nmain,INIT_1,Qubit 1,80,20000,play\\nmain,INIT_1,Qubit 1,72,20000,play\\nmain,barrier,Qubit 0,20080,0,barrier\\nmain,barrier,Qubit 1,20080,0,barrier\\nmain,rz_0,Qubit 1,20080,0,shift_phase\\nmain,rz_0,Qubit 14,20080,0,shift_phase\\nmain,rz_0,Qubit 0,20080,0,shift_phase\\nmain,sx_0,Qubit 0,20080,120,play\\nmain,sx_0,Qubit 1,20200,0,shift_phase\\nmain,sx_0,Qubit 14,20200,0,shift_phase\\nmain,sx_0,Qubit 0,20200,0,shift_phase\\nmain,rz_1,Qubit 2,20080,0,shift_phase\\nmain,rz_1,Qubit 1,20080,0,shift_phase\\nmain,rz_1,Qubit 0,20080,0,shift_phase\\nmain,sx_1,Qubit 1,20080,120,play\\nmain,sx_1,Qubit 2,20200,0,shift_phase\\nmain,sx_1,Qubit 1,20200,0,shift_phase\\nmain,sx_1,Qubit 0,20200,0,shift_phase\\nmain,rz_1,Qubit 2,20200,0,shift_phase\\nmain,rz_1,Qubit 1,20200,0,shift_phase\\nmain,rz_1,Qubit 0,20200,0,shift_phase\\nmain,ecr_1_0,Qubit 0,20200,600,play\\nmain,ecr_1_0,Qubit 1,20200,600,play\\nmain,ecr_1_0,Qubit 1,20800,120,play\\nmain,ecr_1_0,Qubit 0,20920,600,play\\nmain,ecr_1_0,Qubit 1,20920,600,play\\nmain,rz_0,Qubit 1,21520,0,shift_phase\\nmain,rz_0,Qubit 14,21520,0,shift_phase\\nmain,rz_0,Qubit 0,21520,0,shift_phase\\nmain,sx_0,Qubit 0,21520,120,play\\nmain,sx_0,Qubit 1,21640,0,shift_phase\\nmain,sx_0,Qubit 14,21640,0,shift_phase\\nmain,sx_0,Qubit 0,21640,0,shift_phase\\nmain,rz_0,Qubit 1,21640,0,shift_phase\\nmain,rz_0,Qubit 14,21640,0,shift_phase\\nmain,rz_0,Qubit 0,21640,0,shift_phase\\nmain,rz_1,Qubit 2,21520,0,shift_phase\\nmain,rz_1,Qubit 1,21520,0,shift_phase\\nmain,rz_1,Qubit 0,21520,0,shift_phase\\nmain,sx_1,Qubit 1,21520,120,play\\nmain,sx_1,Qubit 2,21640,0,shift_phase\\nmain,sx_1,Qubit 1,21640,0,shift_phase\\nmain,sx_1,Qubit 0,21640,0,shift_phase\\nmain,rz_1,Qubit 2,21640,0,shift_phase\\nmain,rz_1,Qubit 1,21640,0,shift_phase\\nmain,rz_1,Qubit 0,21640,0,shift_phase\\nmain,barrier,Qubit 0,21640,0,barrier\\nmain,barrier,Qubit 1,21640,0,barrier\\nmain,measure_0,Qubit 0,21640,1440,play\\nmain,measure_0,AWGRM_4,22528,1600,capture\\nmain,measure_1,Qubit 1,21640,1440,play\\nmain,measure_1,AWGRC_8,22528,1600,capture\\n'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the circuit schedule timing\n", + "result[0].metadata[\"compilation\"][\"scheduler_timing\"][\"timing\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, you can visualize and save the timing:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_ibm_runtime.visualization import draw_circuit_schedule_timing\n", + "\n", + "circuit_schedule = (\n", + " result[0]\n", + " .metadata[\"compilation\"][\"scheduler_timing\"][\"timing\"]\n", + ")\n", + "fig = draw_circuit_schedule_timing(\n", + " circuit_schedule=circuit_schedule,\n", + " included_channels=None,\n", + " filter_readout_channels=False,\n", + " filter_barriers=False,\n", + " width=1000,\n", + ")\n", + "\n", + "# Display the figure\n", + "fig.show(renderer=\"notebook\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next steps\n", + "\n", + "\n", + " - [Classical feedforward and control flow](/docs/guides/classical-feedforward-and-control-flow) (dynamic circuits)\n", + " - [Visualize circuits](/docs/guides/Visualize circuits)\n", + "" + ] + } + ], + "metadata": { + "description": "Visualize scheduling on a circuit by using the Qiskit timeline_drawer method.", + "kernelspec": { + "display_name": "Python 3", + "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" + }, + "title": "Visualize circuit timing" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/guides/visualize-circuits.ipynb b/docs/guides/visualize-circuits.ipynb index ae55501b852..48840d826a3 100644 --- a/docs/guides/visualize-circuits.ipynb +++ b/docs/guides/visualize-circuits.ipynb @@ -509,8 +509,9 @@ "\n", "\n", " - See an example of circuit visualization in the [Grover's Algorithm](/docs/tutorials/grovers-algorithm) tutorial.\n", - " - Visualize simple circuits using [IBM Quantum Composer](/docs/guides/composer).\n", - " - Review the [Qiskit visualizations API documentation](/docs/api/qiskit/visualization).\n", + " - Visualize simple circuits using [IBM Quantum Composer.](/docs/guides/composer)\n", + " - [Visualize circuit timing.](/docs/guides/visualize-circuit-timing)\n", + " - Review the [Qiskit visualizations API documentation.](/docs/api/qiskit/visualization)\n", "" ] } diff --git a/qiskit_bot.yaml b/qiskit_bot.yaml index 7218a9cb80e..b61215c3ff0 100644 --- a/qiskit_bot.yaml +++ b/qiskit_bot.yaml @@ -80,6 +80,10 @@ notifications: - "`@mtreinish`" "docs/guides/composer": - "@abbycross" + "docs/guides/visualize-circuit-timing": + - "@jyu00" + - "@beckykd" + - "@abbycross" "docs/guides/configure-error-mitigation": - "@jyu00" - "@beckykd" diff --git a/scripts/config/notebook-testing.toml b/scripts/config/notebook-testing.toml index 12e4465dd70..b22597333d3 100644 --- a/scripts/config/notebook-testing.toml +++ b/scripts/config/notebook-testing.toml @@ -39,6 +39,7 @@ notebooks = [ "docs/guides/transpiler-plugins.ipynb", "docs/guides/transpiler-stages.ipynb", "docs/guides/visualize-circuits.ipynb", + "docs/guides/visualize-circuit-timing.ipynb", "docs/guides/qiskit-addons-cutting-wires.ipynb", "docs/guides/qiskit-addons-utils.ipynb", "docs/guides/bit-ordering.ipynb", diff --git a/scripts/nb-tester/requirements.txt b/scripts/nb-tester/requirements.txt index bf48e91f78c..79d3dde41a3 100644 --- a/scripts/nb-tester/requirements.txt +++ b/scripts/nb-tester/requirements.txt @@ -2,7 +2,9 @@ # stable build. qiskit[all]~=2.1.2 -qiskit-ibm-runtime~=0.40.1 +# adding this line to test Roy's code and get output. It should be removed before merging. +qiskit-ibm-runtime @ git+https://github.com/RoyElkabetz/qiskit-ibm-runtime.git@re-sched-vis +qiskit-ibm-transpiler[ai-local-mode]~=0.14.0 qiskit-ibm-transpiler[ai-local-mode]~=0.14.2 qiskit-aer~=0.17 qiskit-serverless~=0.26.0 @@ -18,6 +20,7 @@ scipy~=1.16.1 scikit-learn~=1.7.2 pyscf~=2.10.0; sys.platform != 'win32' python-sat~=1.8.dev23 +plotly~=6.3.1 gem-suite~=0.1.6 ffsim~=0.0.58; sys.platform != 'win32' sympy~=1.14.0