From d401fdd68f7b7203cd7fcc8892edb0a501688f1c Mon Sep 17 00:00:00 2001 From: Eric Arellano <14852634+Eric-Arellano@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:08:52 -0400 Subject: [PATCH 1/3] Generate qiskit-ibm-provider 0.11 docs --- .../qiskit-ibm-provider/0.10/_package.json | 4 + docs/api/qiskit-ibm-provider/0.10/_toc.json | 214 ++++++ docs/api/qiskit-ibm-provider/0.10/ibm_job.mdx | 46 ++ .../qiskit-ibm-provider/0.10/ibm_jupyter.mdx | 57 ++ .../qiskit-ibm-provider/0.10/ibm_provider.mdx | 66 ++ .../0.10/ibm_transpiler.mdx | 28 + .../qiskit-ibm-provider/0.10/ibm_utils.mdx | 102 +++ .../0.10/ibm_visualization.mdx | 35 + docs/api/qiskit-ibm-provider/0.10/index.mdx | 14 + .../0.10/qiskit_ibm_provider.IBMBackend.mdx | 626 ++++++++++++++++ ...qiskit_ibm_provider.IBMBackendApiError.mdx | 16 + ...bm_provider.IBMBackendApiProtocolError.mdx | 16 + .../qiskit_ibm_provider.IBMBackendError.mdx | 16 + .../qiskit_ibm_provider.IBMBackendService.mdx | 160 ++++ ...skit_ibm_provider.IBMBackendValueError.mdx | 16 + .../0.10/qiskit_ibm_provider.IBMError.mdx | 16 + .../0.10/qiskit_ibm_provider.IBMProvider.mdx | 340 +++++++++ .../qiskit_ibm_provider.IBMProviderError.mdx | 16 + ...kit_ibm_provider.IBMProviderValueError.mdx | 16 + .../0.10/qiskit_ibm_provider.Session.mdx | 88 +++ .../qiskit_ibm_provider.job.IBMCircuitJob.mdx | 557 ++++++++++++++ ...iskit_ibm_provider.job.IBMCompositeJob.mdx | 685 ++++++++++++++++++ ...qiskit_ibm_provider.job.IBMJobApiError.mdx | 16 + .../qiskit_ibm_provider.job.IBMJobError.mdx | 16 + ...it_ibm_provider.job.IBMJobFailureError.mdx | 16 + ...m_provider.job.IBMJobInvalidStateError.mdx | 16 + ...it_ibm_provider.job.IBMJobTimeoutError.mdx | 16 + .../qiskit_ibm_provider.job.QueueInfo.mdx | 66 ++ .../qiskit_ibm_provider.job.job_monitor.mdx | 26 + .../0.10/qiskit_ibm_provider.least_busy.mdx | 34 + ...t_ibm_provider.transpiler.passes.basis.mdx | 22 + .../qiskit_ibm_provider.transpiler.passes.mdx | 27 + ...passes.scheduling.ALAPScheduleAnalysis.mdx | 141 ++++ ...passes.scheduling.ASAPScheduleAnalysis.mdx | 141 ++++ ...iler.passes.scheduling.BlockBasePadder.mdx | 135 ++++ ...ing.DynamicCircuitInstructionDurations.mdx | 128 ++++ ....transpiler.passes.scheduling.PadDelay.mdx | 147 ++++ ...sses.scheduling.PadDynamicalDecoupling.mdx | 282 +++++++ ..._provider.transpiler.passes.scheduling.mdx | 384 ++++++++++ ...ibm_provider.utils.seconds_to_duration.mdx | 28 + ...bm_provider.utils.to_python_identifier.mdx | 28 + ...qiskit_ibm_provider.utils.utc_to_local.mdx | 32 + ...t_ibm_provider.utils.validate_job_tags.mdx | 29 + ...provider.visualization.iplot_error_map.mdx | 52 ++ ..._provider.visualization.iplot_gate_map.mdx | 53 ++ docs/api/qiskit-ibm-provider/_package.json | 2 +- docs/api/qiskit-ibm-provider/ibm_jupyter.mdx | 9 +- docs/api/qiskit-ibm-provider/ibm_utils.mdx | 12 +- .../qiskit_ibm_provider.IBMBackend.mdx | 34 +- ...qiskit_ibm_provider.IBMBackendApiError.mdx | 2 +- ...bm_provider.IBMBackendApiProtocolError.mdx | 2 +- .../qiskit_ibm_provider.IBMBackendError.mdx | 2 +- .../qiskit_ibm_provider.IBMBackendService.mdx | 12 +- ...skit_ibm_provider.IBMBackendValueError.mdx | 2 +- .../qiskit_ibm_provider.IBMError.mdx | 2 +- .../qiskit_ibm_provider.IBMProvider.mdx | 24 +- .../qiskit_ibm_provider.IBMProviderError.mdx | 2 +- ...kit_ibm_provider.IBMProviderValueError.mdx | 2 +- .../qiskit_ibm_provider.Session.mdx | 4 +- .../qiskit_ibm_provider.job.IBMCircuitJob.mdx | 44 +- ...iskit_ibm_provider.job.IBMCompositeJob.mdx | 54 +- ...qiskit_ibm_provider.job.IBMJobApiError.mdx | 2 +- .../qiskit_ibm_provider.job.IBMJobError.mdx | 2 +- ...it_ibm_provider.job.IBMJobFailureError.mdx | 2 +- ...m_provider.job.IBMJobInvalidStateError.mdx | 2 +- ...it_ibm_provider.job.IBMJobTimeoutError.mdx | 2 +- .../qiskit_ibm_provider.job.QueueInfo.mdx | 4 +- .../qiskit_ibm_provider.job.job_monitor.mdx | 2 +- .../qiskit_ibm_provider.least_busy.mdx | 2 +- ...passes.scheduling.ALAPScheduleAnalysis.mdx | 4 +- ...passes.scheduling.ASAPScheduleAnalysis.mdx | 4 +- ...iler.passes.scheduling.BlockBasePadder.mdx | 4 +- ...ing.DynamicCircuitInstructionDurations.mdx | 8 +- ....transpiler.passes.scheduling.PadDelay.mdx | 4 +- ...sses.scheduling.PadDynamicalDecoupling.mdx | 65 +- ..._provider.transpiler.passes.scheduling.mdx | 37 +- ...ibm_provider.utils.seconds_to_duration.mdx | 2 +- ...bm_provider.utils.to_python_identifier.mdx | 2 +- ...qiskit_ibm_provider.utils.utc_to_local.mdx | 2 +- ...t_ibm_provider.utils.validate_job_tags.mdx | 2 +- ...provider.visualization.iplot_error_map.mdx | 10 +- ..._provider.visualization.iplot_gate_map.mdx | 10 +- .../api/qiskit-ibm-provider/release-notes.mdx | 138 ++-- .../api/qiskit-ibm-provider/0.10/objects.inv | Bin 0 -> 3365 bytes ...ider.transpiler.passes.scheduling_10_0.png | Bin 0 -> 9282 bytes ...ider.transpiler.passes.scheduling_11_0.png | Bin 0 -> 9687 bytes ...ider.transpiler.passes.scheduling_12_0.png | Bin 0 -> 7004 bytes ...ider.transpiler.passes.scheduling_13_0.png | Bin 0 -> 6991 bytes ...ider.transpiler.passes.scheduling_14_0.png | Bin 0 -> 7246 bytes ...ider.transpiler.passes.scheduling_15_0.png | Bin 0 -> 18297 bytes ...ider.transpiler.passes.scheduling_16_0.png | Bin 0 -> 11921 bytes ...vider.transpiler.passes.scheduling_1_0.png | Bin 0 -> 57985 bytes ...vider.transpiler.passes.scheduling_2_0.png | Bin 0 -> 62527 bytes ...vider.transpiler.passes.scheduling_3_0.png | Bin 0 -> 3565 bytes ...vider.transpiler.passes.scheduling_4_0.png | Bin 0 -> 21200 bytes ...vider.transpiler.passes.scheduling_5_0.png | Bin 0 -> 21200 bytes ...vider.transpiler.passes.scheduling_6_0.png | Bin 0 -> 11208 bytes ...vider.transpiler.passes.scheduling_7_0.png | Bin 0 -> 7598 bytes ...vider.transpiler.passes.scheduling_8_0.png | Bin 0 -> 8263 bytes ...vider.transpiler.passes.scheduling_9_0.png | Bin 0 -> 12759 bytes scripts/api-html-artifacts.json | 1 + 101 files changed, 5208 insertions(+), 281 deletions(-) create mode 100644 docs/api/qiskit-ibm-provider/0.10/_package.json create mode 100644 docs/api/qiskit-ibm-provider/0.10/_toc.json create mode 100644 docs/api/qiskit-ibm-provider/0.10/ibm_job.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/ibm_jupyter.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/ibm_provider.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/ibm_transpiler.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/ibm_utils.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/ibm_visualization.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/index.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackend.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendService.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendValueError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProvider.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderValueError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.Session.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCircuitJob.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCompositeJob.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobApiError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobFailureError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.QueueInfo.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.job_monitor.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.least_busy.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.basis.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.seconds_to_duration.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.to_python_identifier.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.utc_to_local.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.validate_job_tags.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_error_map.mdx create mode 100644 docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_gate_map.mdx create mode 100644 public/api/qiskit-ibm-provider/0.10/objects.inv create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_10_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_16_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png diff --git a/docs/api/qiskit-ibm-provider/0.10/_package.json b/docs/api/qiskit-ibm-provider/0.10/_package.json new file mode 100644 index 00000000000..9c7a52a5269 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/_package.json @@ -0,0 +1,4 @@ +{ + "name": "qiskit-ibm-provider", + "version": "0.10.0" +} diff --git a/docs/api/qiskit-ibm-provider/0.10/_toc.json b/docs/api/qiskit-ibm-provider/0.10/_toc.json new file mode 100644 index 00000000000..dd975d3b313 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/_toc.json @@ -0,0 +1,214 @@ +{ + "title": "Qiskit IBM Provider", + "children": [ + { + "title": "qiskit_ibm_provider", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/ibm_provider" + }, + { + "title": "IBMBackend", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackend" + }, + { + "title": "IBMBackendApiError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiError" + }, + { + "title": "IBMBackendApiProtocolError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiProtocolError" + }, + { + "title": "IBMBackendError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendError" + }, + { + "title": "IBMBackendService", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendService" + }, + { + "title": "IBMBackendValueError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendValueError" + }, + { + "title": "IBMError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMError" + }, + { + "title": "IBMProvider", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProvider" + }, + { + "title": "IBMProviderError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderError" + }, + { + "title": "IBMProviderValueError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderValueError" + }, + { + "title": "least_busy", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.least_busy" + }, + { + "title": "Session", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.Session" + } + ] + }, + { + "title": "qiskit_ibm_provider.job", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/ibm_job" + }, + { + "title": "IBMCircuitJob", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCircuitJob" + }, + { + "title": "IBMCompositeJob", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCompositeJob" + }, + { + "title": "IBMJobApiError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobApiError" + }, + { + "title": "IBMJobError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobError" + }, + { + "title": "IBMJobFailureError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobFailureError" + }, + { + "title": "IBMJobInvalidStateError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobInvalidStateError" + }, + { + "title": "IBMJobTimeoutError", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobTimeoutError" + }, + { + "title": "job_monitor", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.job_monitor" + }, + { + "title": "QueueInfo", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.QueueInfo" + } + ] + }, + { + "title": "qiskit_ibm_provider.jupyter", + "url": "/api/qiskit-ibm-provider/0.10/ibm_jupyter" + }, + { + "title": "qiskit_ibm_provider.transpiler", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/ibm_transpiler" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes.basis", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.basis" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes.scheduling", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling" + }, + { + "title": "ALAPScheduleAnalysis", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis" + }, + { + "title": "ASAPScheduleAnalysis", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis" + }, + { + "title": "BlockBasePadder", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder" + }, + { + "title": "DynamicCircuitInstructionDurations", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations" + }, + { + "title": "PadDelay", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay" + }, + { + "title": "PadDynamicalDecoupling", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling" + } + ] + } + ] + } + ] + }, + { + "title": "qiskit_ibm_provider.utils", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/ibm_utils" + }, + { + "title": "seconds_to_duration", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.seconds_to_duration" + }, + { + "title": "to_python_identifier", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.to_python_identifier" + }, + { + "title": "utc_to_local", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.utc_to_local" + }, + { + "title": "validate_job_tags", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.validate_job_tags" + } + ] + }, + { + "title": "qiskit_ibm_provider.visualization", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.10/ibm_visualization" + }, + { + "title": "iplot_error_map", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_error_map" + }, + { + "title": "iplot_gate_map", + "url": "/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_gate_map" + } + ] + }, + { + "title": "Release notes", + "url": "/api/qiskit-ibm-provider/release-notes" + } + ], + "collapsed": true +} + diff --git a/docs/api/qiskit-ibm-provider/0.10/ibm_job.mdx b/docs/api/qiskit-ibm-provider/0.10/ibm_job.mdx new file mode 100644 index 00000000000..613ac57f0b3 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/ibm_job.mdx @@ -0,0 +1,46 @@ +--- +title: job +description: API reference for qiskit_ibm_provider.job +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.job +--- + + + + + + + +# Job + + + +`qiskit_ibm_provider.job` + +Modules representing IBM Quantum jobs. + +## Classes + +| | | +| --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| [`IBMCircuitJob`](qiskit_ibm_provider.job.IBMCircuitJob "qiskit_ibm_provider.job.IBMCircuitJob")(backend, api\_client, job\_id\[, ...]) | Representation of a job that executes on an IBM Quantum backend. | +| [`IBMCompositeJob`](qiskit_ibm_provider.job.IBMCompositeJob "qiskit_ibm_provider.job.IBMCompositeJob")(backend, api\_client\[, ...]) | Representation of a set of jobs that execute on an IBM Quantum backend. | +| [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo")(\[position\_in\_queue, status, ...]) | Queue information for a job. | + +## Functions + +| | | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | +| [`job_monitor`](qiskit_ibm_provider.job.job_monitor "qiskit_ibm_provider.job.job_monitor")(job\[, interval, output]) | Monitor the status of an `IBMJob` instance. | + +## Exception + +| | | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | +| [`IBMJobError`](qiskit_ibm_provider.job.IBMJobError "qiskit_ibm_provider.job.IBMJobError")(\*message) | Base class for errors raised by the job modules. | +| [`IBMJobApiError`](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError")(\*message) | Errors that occur unexpectedly when querying the server. | +| [`IBMJobFailureError`](qiskit_ibm_provider.job.IBMJobFailureError "qiskit_ibm_provider.job.IBMJobFailureError")(\*message) | Errors raised when a job failed. | +| [`IBMJobInvalidStateError`](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError")(\*message) | Errors raised when a job is not in a valid state for the operation. | +| [`IBMJobTimeoutError`](qiskit_ibm_provider.job.IBMJobTimeoutError "qiskit_ibm_provider.job.IBMJobTimeoutError")(\*message) | Errors raised when a job operation times out. | + diff --git a/docs/api/qiskit-ibm-provider/0.10/ibm_jupyter.mdx b/docs/api/qiskit-ibm-provider/0.10/ibm_jupyter.mdx new file mode 100644 index 00000000000..1a4965ba4cc --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/ibm_jupyter.mdx @@ -0,0 +1,57 @@ +--- +title: jupyter +description: API reference for qiskit_ibm_provider.jupyter +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.jupyter +--- + + + + + + + +# Jupyter Tools + + + +`qiskit_ibm_provider.jupyter` + +A Collection of Jupyter magic functions and tools that extend the functionality of Qiskit for the IBM Quantum devices. + + + To use these tools locally, you’ll need to install the additional dependencies for the visualization functions: + + ```python + pip install qiskit_ibm_provider[visualization] + ``` + + +## Detailed information on a single backend + +```python +from qiskit_ibm_provider import IBMProvider +import qiskit_ibm_provider.jupyter + +provider = IBMProvider(hub='ibm-q') +backend = provider.get_backend('ibmq_vigo') +``` + +```python +backend +``` + +```python + +``` + +## IBM Quantum dashboard + +```python +from qiskit_ibm_provider import IBMProvider +import qiskit_ibm_provider.jupyter + +%ibm_quantum_dashboard +``` + diff --git a/docs/api/qiskit-ibm-provider/0.10/ibm_provider.mdx b/docs/api/qiskit-ibm-provider/0.10/ibm_provider.mdx new file mode 100644 index 00000000000..e82a4b52286 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/ibm_provider.mdx @@ -0,0 +1,66 @@ +--- +title: qiskit_ibm_provider +description: API reference for qiskit_ibm_provider +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider +--- + + + + + + + +# IBM Quantum Provider + + + +`qiskit_ibm_provider` + +Modules representing the Qiskit IBM Quantum Provider. + +## Logging + +The qiskit-ibm-provider uses the `qiskit_ibm_provider` logger. + +Two environment variables can be used to control the logging: + +> * `QISKIT_IBM_PROVIDER_LOG_LEVEL`: Specifies the log level to use, for the Qiskit IBM provider modules. If an invalid level is set, the log level defaults to `WARNING`. The valid log levels are `DEBUG`, `INFO`, `WARNING`, `ERROR`, and `CRITICAL` (case-insensitive). If the environment variable is not set, then the parent logger’s level is used, which also defaults to `WARNING`. +> * `QISKIT_IBM_PROVIDER_LOG_FILE`: Specifies the name of the log file to use. If specified, messages will be logged to the file only. Otherwise messages will be logged to the standard error (usually the screen). + +For more advanced use, you can modify the logger itself. For example, to manually set the level to `WARNING`: + +```python +import logging +logging.getLogger('qiskit_ibm_provider').setLevel(logging.WARNING) +``` + +## Functions + +| | | +| ----------------------------------------------------------------------------------------- | ------------------------------------------ | +| [`least_busy`](qiskit_ibm_provider.least_busy "qiskit_ibm_provider.least_busy")(backends) | Return the least busy backend from a list. | + +## Classes + +| | | +| ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | +| [`IBMProvider`](qiskit_ibm_provider.IBMProvider "qiskit_ibm_provider.IBMProvider")(\[token, url, name, instance, ...]) | Provides access to the IBM Quantum services available to an account. | +| [`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.IBMBackend")(configuration, provider, api\_client) | Backend class interfacing with an IBM Quantum device. | +| [`IBMBackendService`](qiskit_ibm_provider.IBMBackendService "qiskit_ibm_provider.IBMBackendService")(provider, hgp) | Backend namespace for an IBM Quantum account. | +| [`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.Session")(\[max\_time, session\_id]) | Class for creating a flexible Qiskit Runtime session. | + +## Exceptions + +| | | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | +| [`IBMError`](qiskit_ibm_provider.IBMError "qiskit_ibm_provider.IBMError")(\*message) | Base class for errors raised by the provider modules. | +| [`IBMProviderError`](qiskit_ibm_provider.IBMProviderError "qiskit_ibm_provider.IBMProviderError")(\*message) | Base class for errors raise by IBMProvider. | +| [`IBMProviderValueError`](qiskit_ibm_provider.IBMProviderValueError "qiskit_ibm_provider.IBMProviderValueError")(\*message) | Value errors raised by IBMProvider. | +| [`IBMBackendError`](qiskit_ibm_provider.IBMBackendError "qiskit_ibm_provider.IBMBackendError")(\*message) | Base class for errors raised by the backend modules. | +| [`IBMBackendApiError`](qiskit_ibm_provider.IBMBackendApiError "qiskit_ibm_provider.IBMBackendApiError")(\*message) | Errors that occur unexpectedly when querying the server. | +| [`IBMBackendApiProtocolError`](qiskit_ibm_provider.IBMBackendApiProtocolError "qiskit_ibm_provider.IBMBackendApiProtocolError")(\*message) | Errors raised when an unexpected value is received from the server. | +| [`IBMBackendValueError`](qiskit_ibm_provider.IBMBackendValueError "qiskit_ibm_provider.IBMBackendValueError")(\*message) | Value errors raised by the backend modules. | +| [`IBMProviderError`](qiskit_ibm_provider.IBMProviderError "qiskit_ibm_provider.IBMProviderError")(\*message) | Base class for errors raise by IBMProvider. | + diff --git a/docs/api/qiskit-ibm-provider/0.10/ibm_transpiler.mdx b/docs/api/qiskit-ibm-provider/0.10/ibm_transpiler.mdx new file mode 100644 index 00000000000..60c019ce32a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/ibm_transpiler.mdx @@ -0,0 +1,28 @@ +--- +title: transpiler +description: API reference for qiskit_ibm_provider.transpiler +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.transpiler +--- + + + + + + + +# IBM Backend Transpiler Tools + + + +`qiskit_ibm_provider.transpiler` + +A collection of transpiler tools for working with IBM Quantum’s next-generation backends that support advanced “dynamic circuit” capabilities. Ie., circuits with support for classical compute and control-flow/feedback based off of measurement results. + +## Transpiler Passes + +| | | +| -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | +| [`passes`](qiskit_ibm_provider.transpiler.passes#module-qiskit_ibm_provider.transpiler.passes "qiskit_ibm_provider.transpiler.passes") | Transpiler Passes (qiskit\_ibm\_provider.transpiler.passes) | + diff --git a/docs/api/qiskit-ibm-provider/0.10/ibm_utils.mdx b/docs/api/qiskit-ibm-provider/0.10/ibm_utils.mdx new file mode 100644 index 00000000000..98295f4919e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/ibm_utils.mdx @@ -0,0 +1,102 @@ +--- +title: utils +description: API reference for qiskit_ibm_provider.utils +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.utils +--- + + + + + + + +# Utilities + + + +`qiskit_ibm_provider.utils` + +Utility functions related to the IBM Quantum Provider. + +## Conversion + +| | | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| [`seconds_to_duration`](qiskit_ibm_provider.utils.seconds_to_duration "qiskit_ibm_provider.utils.seconds_to_duration")(seconds) | Converts seconds in a datetime delta to a duration. | +| [`utc_to_local`](qiskit_ibm_provider.utils.utc_to_local "qiskit_ibm_provider.utils.utc_to_local")(utc\_dt) | Convert a UTC `datetime` object or string to a local timezone `datetime`. | + +## Misc Functions + +| | | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| [`to_python_identifier`](qiskit_ibm_provider.utils.to_python_identifier "qiskit_ibm_provider.utils.to_python_identifier")(name) | Convert a name to a valid Python identifier. | +| [`validate_job_tags`](qiskit_ibm_provider.utils.validate_job_tags "qiskit_ibm_provider.utils.validate_job_tags")(job\_tags, exception) | Validates input job tags. | + + + + + +## Publisher/subscriber model + +Message broker for the Publisher / Subscriber mechanism + + + Represents a “publisher”. + + Every component (class) can become a [`Publisher`](#qiskit_ibm_provider.utils.pubsub.Publisher "qiskit_ibm_provider.utils.pubsub.Publisher") and send events by inheriting this class. Functions can call this class like: + + ```python + Publisher().publish("event", args, ... ) + ``` + + ### publish + + + Triggers an event, and associates some data to it, so if there are any subscribers, their callback will be called synchronously. + + **Return type** + + `None` + + + + + Represents a “subscriber”. + + Every component (class) can become a [`Subscriber`](#qiskit_ibm_provider.utils.pubsub.Subscriber "qiskit_ibm_provider.utils.pubsub.Subscriber") and subscribe to events, that will call callback functions when they are emitted. + + ### clear + + + Unsubscribe everything + + **Return type** + + `None` + + + ### subscribe + + + Subscribes to an event, associating a callback function to that event, so when the event occurs, the callback will be called. + + This is a blocking call, so try to keep callbacks as lightweight as possible. + + **Return type** + + `bool` + + + ### unsubscribe + + + Unsubscribe a pair event-callback, so the callback will not be called anymore when the event occurs. + + **Return type** + + `bool` + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/ibm_visualization.mdx b/docs/api/qiskit-ibm-provider/0.10/ibm_visualization.mdx new file mode 100644 index 00000000000..a691c216bf6 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/ibm_visualization.mdx @@ -0,0 +1,35 @@ +--- +title: visualization +description: API reference for qiskit_ibm_provider.visualization +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.visualization +--- + + + + + + + +# Visualizations + + + +`qiskit_ibm_provider.visualization` + + + To use these tools locally, you’ll need to install the additional dependencies for the visualization functions: + + ```python + pip install qiskit_ibm_provider[visualization] + ``` + + +## Interactive Visualizations + +| | | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [`iplot_gate_map`](qiskit_ibm_provider.visualization.iplot_gate_map "qiskit_ibm_provider.visualization.iplot_gate_map")(backend\[, figsize, ...]) | Plots an interactive gate map of a device. | +| [`iplot_error_map`](qiskit_ibm_provider.visualization.iplot_error_map "qiskit_ibm_provider.visualization.iplot_error_map")(backend\[, figsize, ...]) | Plot the error map of a device. | + diff --git a/docs/api/qiskit-ibm-provider/0.10/index.mdx b/docs/api/qiskit-ibm-provider/0.10/index.mdx new file mode 100644 index 00000000000..fd5f3e44452 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/index.mdx @@ -0,0 +1,14 @@ +--- +title: Qiskit IBM Provider API Docs +description: API documentation for qiskit-ibm-provider +--- + +# qiskit-ibm-provider API Reference + +* [IBM Quantum Provider (`qiskit_ibm_provider`)](ibm_provider) +* [Job (`qiskit_ibm_provider.job`)](ibm_job) +* [Visualizations (`qiskit_ibm_provider.visualization`)](ibm_visualization) +* [Jupyter Tools (`qiskit_ibm_provider.jupyter`)](ibm_jupyter) +* [Utilities (`qiskit_ibm_provider.utils`)](ibm_utils) +* [IBM Backend Transpiler Tools (`qiskit_ibm_provider.transpiler`)](ibm_transpiler) + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackend.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackend.mdx new file mode 100644 index 00000000000..4b30d440e28 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackend.mdx @@ -0,0 +1,626 @@ +--- +title: IBMBackend +description: API reference for qiskit_ibm_provider.IBMBackend +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.IBMBackend +--- + +# IBMBackend + + + Backend class interfacing with an IBM Quantum device. + + You can run experiments on a backend using the [`run()`](#qiskit_ibm_provider.IBMBackend.run "qiskit_ibm_provider.IBMBackend.run") method. The [`run()`](#qiskit_ibm_provider.IBMBackend.run "qiskit_ibm_provider.IBMBackend.run") method takes one or more [`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)") and returns an `IBMJob` instance that represents the submitted job. Each job has a unique job ID, which can later be used to retrieve the job. An example of this flow: + + ```python + from qiskit import transpile + from qiskit_ibm_provider import IBMProvider + from qiskit.circuit.random import random_circuit + + provider = IBMProvider() + backend = provider.backend.ibmq_vigo + qx = random_circuit(n_qubits=5, depth=4) + transpiled = transpile(qx, backend=backend) + job = backend.run(transpiled) + retrieved_job = provider.backend.retrieve_job(job.job_id()) + ``` + + + * Unlike `qiskit.execute()`, the [`run()`](#qiskit_ibm_provider.IBMBackend.run "qiskit_ibm_provider.IBMBackend.run") method does not transpile the circuits for you, so be sure to do so before submitting them. + * You should not instantiate the `IBMBackend` class directly. Instead, use the methods provided by an [`IBMProvider`](qiskit_ibm_provider.IBMProvider "qiskit_ibm_provider.IBMProvider") instance to retrieve and handle backends. + + + Other methods return information about the backend. For example, the [`status()`](#qiskit_ibm_provider.IBMBackend.status "qiskit_ibm_provider.IBMBackend.status") method returns a [`BackendStatus`](/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v1.0)") instance. The instance contains the `operational` and `pending_jobs` attributes, which state whether the backend is operational and also the number of jobs in the server queue for the backend, respectively: + + ```python + status = backend.status() + is_operational = status.operational + jobs_in_queue = status.pending_jobs + ``` + + **Here is list of attributes available on the `IBMBackend` class:** + + * name: backend name. + + * backend\_version: backend version in the form X.Y.Z. + + * num\_qubits: number of qubits. + + * target: A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") object for the backend. + + * basis\_gates: list of basis gates names on the backend. + + * gates: list of basis gates on the backend. + + * local: backend is local or remote. + + * simulator: backend is a simulator. + + * conditional: backend supports conditional operations. + + * open\_pulse: backend supports open pulse. + + * memory: backend supports memory. + + * max\_shots: maximum number of shots supported. + + * coupling\_map (list): The coupling map for the device + + * supported\_instructions (List\[str]): Instructions supported by the backend. + + * dynamic\_reprate\_enabled (bool): whether delay between programs can be set dynamically (ie via `rep_delay`). Defaults to False. + + * rep\_delay\_range (List\[float]): 2d list defining supported range of repetition delays for backend in μs. First entry is lower end of the range, second entry is higher end of the range. Optional, but will be specified when `dynamic_reprate_enabled=True`. + + * default\_rep\_delay (float): Value of `rep_delay` if not specified by user and `dynamic_reprate_enabled=True`. + + * n\_uchannels: Number of u-channels. + + * u\_channel\_lo: U-channel relationship on device los. + + * meas\_levels: Supported measurement levels. + + * qubit\_lo\_range: Qubit lo ranges for each qubit with form (min, max) in GHz. + + * meas\_lo\_range: Measurement lo ranges for each qubit with form (min, max) in GHz. + + * dt: Qubit drive channel timestep in nanoseconds. + + * dtm: Measurement drive channel timestep in nanoseconds. + + * rep\_times: Supported repetition times (program execution time) for backend in μs. + + * meas\_kernels: Supported measurement kernels. + + * discriminators: Supported discriminators. + + * hamiltonian: An optional dictionary with fields characterizing the system hamiltonian. + + * channel\_bandwidth (list): Bandwidth of all channels (qubit, measurement, and U) + + * acquisition\_latency (list): Array of dimension n\_qubits x n\_registers. Latency (in units of dt) to write a measurement result from qubit n into register slot m. + + * conditional\_latency (list): Array of dimension n\_channels \[d->u->m] x n\_registers. Latency (in units of dt) to do a conditional operation on channel n from register slot m + + * meas\_map (list): Grouping of measurement which are multiplexed + + * max\_circuits (int): The maximum number of experiments per job + + * sample\_name (str): Sample name for the backend + + * n\_registers (int): Number of register slots available for feedback (if conditional is True) + + * register\_map (list): An array of dimension n\_qubits X n\_registers that specifies whether a qubit can store a measurement in a certain register slot. + + * configurable (bool): True if the backend is configurable, if the backend is a simulator + + * credits\_required (bool): True if backend requires credits to run a job. + + * online\_date (datetime): The date that the device went online + + * display\_name (str): Alternate name field for the backend + + * description (str): A description for the backend + + * tags (list): A list of string tags to describe the backend + + * version: version of `Backend` class (Ex: 1, 2) + + * channels: An optional dictionary containing information of each channel – their purpose, type, and qubits operated on. + + * parametric\_pulses (list): A list of pulse shapes which are supported on the backend. For example: `['gaussian', 'constant']` + + * processor\_type (dict): Processor type for this backend. A dictionary of the form `{"family": , "revision": , segment: }` such as `{"family": "Canary", "revision": "1.0", segment: "A"}`. + + > * family: Processor family of this backend. + > * revision: Revision version of this processor. + > * segment: Segment this processor belongs to within a larger chip. + + IBMBackend constructor. + + **Parameters** + + * **configuration** (`Union`\[[`QasmBackendConfiguration`](/api/qiskit/qiskit.providers.models.QasmBackendConfiguration "(in Qiskit v1.0)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v1.0)")]) – Backend configuration. + * **provider** ([`IBMProvider`](qiskit_ibm_provider.IBMProvider "qiskit_ibm_provider.ibm_provider.IBMProvider")) – IBM Quantum account provider. + * **api\_client** (`AccountClient`) – IBM Quantum client used to communicate with the server. + + ## Attributes + + ### coupling\_map + + + Return the [`CouplingMap`](/api/qiskit/qiskit.transpiler.CouplingMap "(in Qiskit v1.0)") object + + + ### dt + + + Return the system time resolution of input signals + + This is required to be implemented if the backend supports Pulse scheduling. + + **Return type** + + `Optional`\[`float`] + + **Returns** + + The input signal timestep in seconds. If the backend doesn’t define `dt`, `None` will be returned. + + + ### dtm + + + Return the system time resolution of output signals :returns: The output signal timestep in seconds. :rtype: dtm + + + ### id\_warning\_issued + + + + ### instruction\_durations + + + Return the [`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v1.0)") object. + + + ### instruction\_schedule\_map + + + Return the [`InstructionScheduleMap`](/api/qiskit/qiskit.pulse.InstructionScheduleMap "(in Qiskit v1.0)") for the instructions defined in this backend’s target. + + + ### instructions + + + A list of Instruction tuples on the backend of the form `(instruction, (qubits)` + + **Return type** + + `List`\[`Tuple`\[[`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v1.0)"), `Tuple`\[`int`]]] + + + ### max\_circuits + + + The maximum number of circuits The maximum number of circuits that can be run in a single job. If there is no limit this will return None. + + **Return type** + + `int` + + + ### meas\_map + + + Return the grouping of measurements which are multiplexed This is required to be implemented if the backend supports Pulse scheduling. :returns: The grouping of measurements which are multiplexed :rtype: meas\_map + + + ### num\_qubits + + + Return the number of qubits the backend has. + + **Return type** + + `int` + + + ### operation\_names + + + A list of instruction names that the backend supports. + + **Return type** + + `List`\[`str`] + + + ### operations + + + A list of [`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v1.0)") instances that the backend supports. + + **Return type** + + `List`\[[`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v1.0)")] + + + ### options + + + Return the options for the backend + + The options of a backend are the dynamic parameters defining how the backend is used. These are used to control the [`run()`](#qiskit_ibm_provider.IBMBackend.run "qiskit_ibm_provider.IBMBackend.run") method. + + + ### provider + + + Return the backend Provider. + + **Returns** + + the Provider responsible for the backend. + + **Return type** + + Provider + + + ### session + + + Return session + + **Return type** + + [`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") + + + ### target + + + A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") :returns: Target + + + ### version + + + + ### name + + + Name of the backend. + + + ### description + + + Optional human-readable description. + + + ### online\_date + + + Date that the backend came online. + + + ### backend\_version + + + Version of the backend being provided. This is not the same as `BackendV2.version`, which is the version of the `Backend` abstract interface. + + + ## Methods + + ### acquire\_channel + + + Return the acquisition channel for the given qubit. + + **Returns** + + The Qubit measurement acquisition line. + + **Return type** + + AcquireChannel + + + ### cancel\_session + + + Cancel session. All pending jobs will be cancelled. + + **Return type** + + `None` + + + ### close\_session + + + Close the session so new jobs will no longer be accepted, but existing queued or running jobs will run to completion. The session will be terminated once there are no more pending jobs. + + **Return type** + + `None` + + + ### configuration + + + Return the backend configuration. + + Backend configuration contains fixed information about the backend, such as its name, number of qubits, basis gates, coupling map, quantum volume, etc. + + The schema for backend configuration can be found in [Qiskit/ibm-quantum-schemas](https://github.com/Qiskit/ibm-quantum-schemas/blob/main/schemas/backend_configuration_schema.json). + + **Return type** + + `Union`\[[`QasmBackendConfiguration`](/api/qiskit/qiskit.providers.models.QasmBackendConfiguration "(in Qiskit v1.0)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v1.0)")] + + **Returns** + + The configuration for the backend. + + + ### control\_channel + + + Return the secondary drive channel for the given qubit. + + This is typically utilized for controlling multiqubit interactions. This channel is derived from other channels. + + **Parameters** + + **qubits** (`Iterable`\[`int`]) – Tuple or list of qubits of the form `(control_qubit, target_qubit)`. + + **Returns** + + The Qubit measurement acquisition line. + + **Return type** + + List\[ControlChannel] + + + ### defaults + + + Return the pulse defaults for the backend. + + The schema for default pulse configuration can be found in [Qiskit/ibm-quantum-schemas](https://github.com/Qiskit/ibm-quantum-schemas/blob/main/schemas/default_pulse_configuration_schema.json). + + **Parameters** + + **refresh** (`bool`) – If `True`, re-query the server for the backend pulse defaults. Otherwise, return a cached version. + + **Return type** + + `Optional`\[[`PulseDefaults`](/api/qiskit/qiskit.providers.models.PulseDefaults "(in Qiskit v1.0)")] + + **Returns** + + The backend pulse defaults or `None` if the backend does not support pulse. + + + ### drive\_channel + + + Return the drive channel for the given qubit. + + **Returns** + + The Qubit drive channel + + **Return type** + + DriveChannel + + + ### get\_translation\_stage\_plugin + + + Return the default translation stage plugin name for IBM backends. + + **Return type** + + `str` + + + ### measure\_channel + + + Return the measure stimulus channel for the given qubit. + + **Returns** + + The Qubit measurement stimulus line + + **Return type** + + MeasureChannel + + + ### open\_session + + + Open session + + **Return type** + + [`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") + + + ### properties + + + Return the backend properties, subject to optional filtering. + + This data describes qubits properties (such as T1 and T2), gates properties (such as gate length and error), and other general properties of the backend. + + The schema for backend properties can be found in [Qiskit/ibm-quantum-schemas](https://github.com/Qiskit/ibm-quantum-schemas/blob/main/schemas/backend_properties_schema.json). + + **Parameters** + + * **refresh** (`bool`) – If `True`, re-query the server for the backend properties. Otherwise, return a cached version. + * **datetime** (`Optional`\[`datetime`]) – By specifying datetime, this function returns an instance of the [`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v1.0)") whose timestamp is closest to, but older than, the specified datetime. + + **Return type** + + `Optional`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v1.0)")] + + **Returns** + + The backend properties or `None` if the backend properties are not currently available. + + **Raises** + + **TypeError** – If an input argument is not of the correct type. + + + ### qubit\_properties + + + Return QubitProperties for a given qubit. + + If there are no defined or the backend doesn’t support querying these details this method does not need to be implemented. + + **Parameters** + + **qubit** (`Union`\[`int`, `List`\[`int`]]) – The qubit to get the `QubitProperties` object for. This can be a single integer for 1 qubit or a list of qubits and a list of `QubitProperties` objects will be returned in the same order + + **Return type** + + `Union`\[[`QubitProperties`](/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v1.0)"), `List`\[[`QubitProperties`](/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v1.0)")]] + + **Returns** + + The `QubitProperties` object for the specified qubit. If a list of qubits is provided a list will be returned. If properties are missing for a qubit this can be `None`. + + **Raises** + + **NotImplementedError** – if the backend doesn’t support querying the qubit properties + + + ### run + + + Run on the backend. If a keyword specified here is also present in the `options` attribute/object, the value specified here will be used for this run. + + **Parameters** + + * **circuits** (`Union`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)"), `str`, `List`\[`Union`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)"), `str`]]]) – An individual or a list of `QuantumCircuit`. + + * **dynamic** (`Optional`\[`bool`]) – Whether the circuit is dynamic (uses in-circuit conditionals) + + * **job\_tags** (`Optional`\[`List`\[`str`]]) – Tags to be assigned to the job. The tags can subsequently be used as a filter in the `jobs()` function call. + + * **init\_circuit** (`Optional`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)")]) – A quantum circuit to execute for initializing qubits before each circuit. If specified, `init_num_resets` is ignored. Applicable only if `dynamic=True` is specified. + + * **init\_num\_resets** (`Optional`\[`int`]) – The number of qubit resets to insert before each circuit execution. + + * **or** (*The following parameters are applicable only if dynamic=False is specified*) – + + * **to.** (*defaulted*) – + + * **header** (`Optional`\[`Dict`]) – User input that will be attached to the job and will be copied to the corresponding result header. Headers do not affect the run. This replaces the old `Qobj` header. + + * **shots** (`Union`\[`int`, `float`, `None`]) – Number of repetitions of each circuit, for sampling. Default: 4000 or `max_shots` from the backend configuration, whichever is smaller. + + * **memory** (`Optional`\[`bool`]) – If `True`, per-shot measurement bitstrings are returned as well (provided the backend supports it). For OpenPulse jobs, only measurement level 2 supports this option. + + * **meas\_level** (`Union`\[`int`, `MeasLevel`, `None`]) – + + Level of the measurement output for pulse experiments. See [OpenPulse specification](https://arxiv.org/pdf/1809.03452.pdf) for details: + + * `0`, measurements of the raw signal (the measurement output pulse envelope) + * `1`, measurement kernel is selected (a complex number obtained after applying the measurement kernel to the measurement output signal) + * `2` (default), a discriminator is selected and the qubit state is stored (0 or 1) + + * **meas\_return** (`Union`\[`str`, `MeasReturnType`, `None`]) – + + Level of measurement data for the backend to return. For `meas_level` 0 and 1: + + * `single` returns information from every shot. + * `avg` returns average measurement output (averaged over number of shots). + + * **rep\_delay** (`Optional`\[`float`]) – Delay between programs in seconds. Only supported on certain backends (if `backend.configuration().dynamic_reprate_enabled=True`). If supported, `rep_delay` must be from the range supplied by the backend (`backend.configuration().rep_delay_range`). Default is given by `backend.configuration().default_rep_delay`. + + * **init\_qubits** (`Optional`\[`bool`]) – Whether to reset the qubits to the ground state for each shot. Default: `True`. + + * **use\_measure\_esp** (`Optional`\[`bool`]) – Whether to use excited state promoted (ESP) readout for measurements which are the terminal instruction to a qubit. ESP readout can offer higher fidelity than standard measurement sequences. See [here](https://arxiv.org/pdf/2008.08571.pdf). Default: `True` if backend supports ESP readout, else `False`. Backend support for ESP readout is determined by the flag `measure_esp_enabled` in `backend.configuration()`. + + * **noise\_model** (`Optional`\[`Any`]) – Noise model. (Simulators only) + + * **seed\_simulator** (`Optional`\[`int`]) – Random seed to control sampling. (Simulators only) + + * **\*\*run\_config** – Extra arguments used to configure the run. + + **Return type** + + `IBMJob` + + **Returns** + + The job to be executed. + + **Raises** + + * [**IBMBackendApiError**](qiskit_ibm_provider.IBMBackendApiError "qiskit_ibm_provider.IBMBackendApiError") – If an unexpected error occurred while submitting the job. + + * [**IBMBackendApiProtocolError**](qiskit_ibm_provider.IBMBackendApiProtocolError "qiskit_ibm_provider.IBMBackendApiProtocolError") – If an unexpected value received from the server. + + * [**IBMBackendValueError**](qiskit_ibm_provider.IBMBackendValueError "qiskit_ibm_provider.IBMBackendValueError") – + + * If an input parameter value is not valid. - If ESP readout is used and the backend does not support this. + + + ### set\_options + + + Set the options fields for the backend + + This method is used to update the options of a backend. If you need to change any of the options prior to running just pass in the kwarg with the new value for the options. + + **Parameters** + + **fields** – The fields to update the options + + **Raises** + + **AttributeError** – If the field passed in is not part of the options + + + ### status + + + Return the backend status. + + + If the returned [`BackendStatus`](/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v1.0)") instance has `operational=True` but `status_msg="internal"`, then the backend is accepting jobs but not processing them. + + + **Return type** + + [`BackendStatus`](/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v1.0)") + + **Returns** + + The status of the backend. + + **Raises** + + [**IBMBackendApiProtocolError**](qiskit_ibm_provider.IBMBackendApiProtocolError "qiskit_ibm_provider.IBMBackendApiProtocolError") – If the status for the backend cannot be formatted properly. + + + ### target\_history + + + A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") :returns: Target with properties found on datetime + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiError.mdx new file mode 100644 index 00000000000..e6d966f626c --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMBackendApiError +description: API reference for qiskit_ibm_provider.IBMBackendApiError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMBackendApiError +--- + +# IBMBackendApiError + + + Errors that occur unexpectedly when querying the server. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx new file mode 100644 index 00000000000..1852d84849c --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMBackendApiProtocolError +description: API reference for qiskit_ibm_provider.IBMBackendApiProtocolError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMBackendApiProtocolError +--- + +# IBMBackendApiProtocolError + + + Errors raised when an unexpected value is received from the server. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendError.mdx new file mode 100644 index 00000000000..1ba2cae9ee5 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMBackendError +description: API reference for qiskit_ibm_provider.IBMBackendError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMBackendError +--- + +# IBMBackendError + + + Base class for errors raised by the backend modules. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendService.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendService.mdx new file mode 100644 index 00000000000..d8f11435dc5 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendService.mdx @@ -0,0 +1,160 @@ +--- +title: IBMBackendService +description: API reference for qiskit_ibm_provider.IBMBackendService +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.IBMBackendService +--- + +# IBMBackendService + + + Backend namespace for an IBM Quantum account. + + Represent a namespace that provides backend related services for the IBM Quantum backends available to this account. An instance of this class is used as a callable attribute to the [`IBMProvider`](qiskit_ibm_provider.IBMProvider "qiskit_ibm_provider.IBMProvider") class. This allows a convenient way to query for all backends or to access a specific backend: + + ```python + backends = provider.backends() # Invoke backends() to get the backends. + sim_backend = provider.backend.ibmq_qasm_simulator # Get a specific backend instance. + ``` + + Also, you are able to retrieve jobs from an account without specifying the backend name. For example, to retrieve the ten most recent jobs you have submitted, regardless of the backend they were submitted to, you could do: + + ```python + most_recent_jobs = provider.backend.jobs(limit=10) + ``` + + It is also possible to retrieve a single job without specifying the backend name: + + ```python + job = provider.backend.retrieve_job() + ``` + + IBMBackendService constructor. + + **Parameters** + + * **provider** ([`IBMProvider`](qiskit_ibm_provider.IBMProvider "qiskit_ibm_provider.ibm_provider.IBMProvider")) – IBM Quantum account provider. + * **hgp** (`HubGroupProject`) – default hub/group/project to use for the service. + + ## Methods + + ### backends + + + Return all backends accessible via this account, subject to optional filtering. + + **Parameters** + + * **name** (`Optional`\[`str`]) – Backend name to filter by. + + * **min\_num\_qubits** (`Optional`\[`int`]) – Minimum number of qubits the backend must have. + + * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. + + * **dynamic\_circuits** (`Optional`\[`bool`]) – Filter by whether the backend supports dynamic circuits. + + * **filters** (`Optional`\[`Callable`\[\[`List`\[[`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")]], `bool`]]) – + + More complex filters, such as lambda functions. For example: + + ```python + IBMProvider.backends(filters=lambda b: b.max_shots > 50000) + IBMProvider.backends(filters=lambda x: ("rz" in x.basis_gates ) + ``` + + * **\*\*kwargs** – + + Simple filters that require a specific value for an attribute in backend configuration, backend status, or provider credentials. + + Examples: + + ```python + # Get the operational real backends + IBMProvider.backends(simulator=False, operational=True) + # Get the backends with at least 127 qubits + IBMProvider.backends(min_num_qubits=127) + # Get the backends that support OpenPulse + IBMProvider.backends(open_pulse=True) + ``` + + For the full list of backend attributes, see the IBMBackend class documentation \<[api/qiskit/providers\_models](/api/qiskit/providers_models)> + + **Return type** + + `List`\[[`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")] + + **Returns** + + The list of available backends that match the filter. + + **Raises** + + * [**IBMBackendValueError**](qiskit_ibm_provider.IBMBackendValueError "qiskit_ibm_provider.IBMBackendValueError") – If only one or two parameters from hub, group, project are specified. + * **QiskitBackendNotFoundError** – If the backend is not found in any instance. + + + ### jobs + + + Return a list of jobs, subject to optional filtering. + + Retrieve jobs that match the given filters and paginate the results if desired. Note that the server has a limit for the number of jobs returned in a single call. As a result, this function might involve making several calls to the server. + + **Parameters** + + * **limit** (`Optional`\[`int`]) – Number of jobs to retrieve. `None` means no limit. Note that the number of sub-jobs within a composite job count towards the limit. + * **skip** (`int`) – Starting index for the job retrieval. + * **backend\_name** (`Optional`\[`str`]) – Name of the backend to retrieve jobs from. + * **status** (`Union`\[`Literal`\[‘pending’, ‘completed’], `List`\[`Union`\[[`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v1.0)"), `str`]], [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v1.0)"), `str`, `None`]) – Filter jobs with either “pending” or “completed” status. You can also specify by + * **example** (*exact status. For*) – or status=\[“RUNNING”, “ERROR”]. + * **status="RUNNING"** (*status=JobStatus.RUNNING or*) – or status=\[“RUNNING”, “ERROR”]. + * **start\_datetime** (`Optional`\[`datetime`]) – Filter by the given start date, in local time. This is used to find jobs whose creation dates are after (greater than or equal to) this local date/time. + * **end\_datetime** (`Optional`\[`datetime`]) – Filter by the given end date, in local time. This is used to find jobs whose creation dates are before (less than or equal to) this local date/time. + * **job\_tags** (`Optional`\[`List`\[`str`]]) – Filter by tags assigned to jobs. Matched jobs are associated with all tags. + * **descending** (`bool`) – If `True`, return the jobs in descending order of the job creation date (i.e. newest first) until the limit is reached. + * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. + * **legacy** (`bool`) – If `True`, only retrieve jobs run from the archived `qiskit-ibmq-provider`. + * **Otherwise** – + * **qiskit-ibm-provider.** (*only retrieve jobs run from*) – + + **Return type** + + `List`\[`IBMJob`] + + **Returns** + + A list of `IBMJob` instances. + + **Raises** + + * [**IBMBackendValueError**](qiskit_ibm_provider.IBMBackendValueError "qiskit_ibm_provider.IBMBackendValueError") – If a keyword value is not recognized. + * **TypeError** – If the input start\_datetime or end\_datetime parameter value is not valid. + + + ### retrieve\_job + + + Return a single job. + + **Parameters** + + **job\_id** (`str`) – The ID of the job to retrieve. + + **Return type** + + `IBMJob` + + **Returns** + + The job with the given id. + + **Raises** + + * [**IBMBackendApiError**](qiskit_ibm_provider.IBMBackendApiError "qiskit_ibm_provider.IBMBackendApiError") – If an unexpected error occurred when retrieving the job. + * [**IBMBackendApiProtocolError**](qiskit_ibm_provider.IBMBackendApiProtocolError "qiskit_ibm_provider.IBMBackendApiProtocolError") – If unexpected return value received from the server. + * **IBMJobNotFoundError** – If job cannot be found. + * **IBMInputValueError** – If job exists but was run from a different service. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendValueError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendValueError.mdx new file mode 100644 index 00000000000..c5584577e74 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMBackendValueError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMBackendValueError +description: API reference for qiskit_ibm_provider.IBMBackendValueError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMBackendValueError +--- + +# IBMBackendValueError + + + Value errors raised by the backend modules. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMError.mdx new file mode 100644 index 00000000000..9d68fa9ae35 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMError +description: API reference for qiskit_ibm_provider.IBMError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMError +--- + +# IBMError + + + Base class for errors raised by the provider modules. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProvider.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProvider.mdx new file mode 100644 index 00000000000..8787524a16b --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProvider.mdx @@ -0,0 +1,340 @@ +--- +title: IBMProvider +description: API reference for qiskit_ibm_provider.IBMProvider +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.IBMProvider +--- + +# IBMProvider + + + Provides access to the IBM Quantum services available to an account. + + Authenticate against IBM Quantum for use from saved credentials or during session. + + Credentials can be saved to disk by calling the save\_account() method: + + ```python + from qiskit_ibm_provider import IBMProvider + IBMProvider.save_account(token=) + ``` + + You can set the default project using the hub, group, and project keywords in save\_account(). Once credentials are saved you can simply instantiate the provider like below to load the saved account and default project: + + ```python + from qiskit_ibm_provider import IBMProvider + provider = IBMProvider() + ``` + + Instead of saving credentials to disk, you can also set the environment variables QISKIT\_IBM\_TOKEN, QISKIT\_IBM\_URL and QISKIT\_IBM\_INSTANCE and then instantiate the provider as below: + + ```python + from qiskit_ibm_provider import IBMProvider + provider = IBMProvider() + ``` + + You can also enable an account just for the current session by instantiating the provider with the API token: + + ```python + from qiskit_ibm_provider import IBMProvider + provider = IBMProvider(token=) + ``` + + token is the only required attribute that needs to be set using one of the above methods. If no url is set, it defaults to ‘[https://auth.quantum-computing.ibm.com/api](https://auth.quantum-computing.ibm.com/api)’. + + + The hub/group/project is selected based on the below selection order, in decreasing order of priority. + + * The hub/group/project you explicity specify when calling a service. Ex: provider.get\_backend(), etc. + * The hub/group/project required for the service. + * The default hub/group/project you set using save\_account(). + * A premium hub/group/project in your account. + * An open access hub/group/project. + + + The IBMProvider offers the [`IBMBackendService`](qiskit_ibm_provider.IBMBackendService "qiskit_ibm_provider.ibm_backend_service.IBMBackendService") which gives access to the IBM Quantum devices and simulators. + + You can obtain an instance of the service as an attribute of the `IBMProvider` instance. For example: + + ```python + backend_service = provider.backend + ``` + + Since [`IBMBackendService`](qiskit_ibm_provider.IBMBackendService "qiskit_ibm_provider.ibm_backend_service.IBMBackendService") is the main service, some of the backend-related methods are available through this class for convenience. + + The [`backends()`](#qiskit_ibm_provider.IBMProvider.backends "qiskit_ibm_provider.IBMProvider.backends") method returns all the backends available to this account: + + ```python + backends = provider.backends() + ``` + + The [`get_backend()`](#qiskit_ibm_provider.IBMProvider.get_backend "qiskit_ibm_provider.IBMProvider.get_backend") method returns a backend that matches the filters passed as argument. An example of retrieving a backend that matches a specified name: + + ```python + simulator_backend = provider.get_backend('ibmq_qasm_simulator') + ``` + + IBMBackend’s are uniquely identified by their name. If you invoke [`get_backend()`](#qiskit_ibm_provider.IBMProvider.get_backend "qiskit_ibm_provider.IBMProvider.get_backend") twice, you will get the same IBMBackend instance, and any previously updated options will be reset to the default values. + + It is also possible to use the `backend` attribute to reference a backend. As an example, to retrieve the same backend from the example above: + + ```python + simulator_backend = provider.backend.ibmq_qasm_simulator + ``` + + + The `backend` attribute can be used to autocomplete the names of backends available to this account. To autocomplete, press `tab` after `provider.backend.`. This feature may not be available if an error occurs during backend discovery. Also note that this feature is only available in interactive sessions, such as in Jupyter Notebook and the Python interpreter. + + + IBMProvider constructor + + **Parameters** + + * **token** (`Optional`\[`str`]) – IBM Quantum API token. + * **url** (`Optional`\[`str`]) – The API URL. Defaults to [https://auth.quantum-computing.ibm.com/api](https://auth.quantum-computing.ibm.com/api). + * **name** (`Optional`\[`str`]) – Name of the account to load. + * **instance** (`Optional`\[`str`]) – Provider in the hub/group/project format. + * **proxies** (`Optional`\[`dict`]) – Proxy configuration. Supported optional keys are `urls` (a dictionary mapping protocol or protocol and host to the URL of the proxy, documented at [https://docs.python-requests.org/en/latest/api/#requests.Session.proxies](https://docs.python-requests.org/en/latest/api/#requests.Session.proxies)), `username_ntlm`, `password_ntlm` (username and password to enable NTLM user authentication) + * **verify** (`Optional`\[`bool`]) – Whether to verify the server’s TLS certificate. + + **Returns** + + An instance of IBMProvider + + **Raises** + + **IBMInputValueError** – If an input is invalid. + + ## Attributes + + ### backend + + + Return the backend service. + + **Return type** + + [`IBMBackendService`](qiskit_ibm_provider.IBMBackendService "qiskit_ibm_provider.ibm_backend_service.IBMBackendService") + + **Returns** + + The backend service instance. + + + ### version + + + + ## Methods + + ### active\_account + + + Return the IBM Quantum account currently in use for the session. + + **Return type** + + `Optional`\[`Dict`\[`str`, `str`]] + + **Returns** + + A dictionary with information about the account currently in the session. + + + ### backends + + + Return all backends accessible via this account, subject to optional filtering. + + **Parameters** + + * **name** (`Optional`\[`str`]) – Backend name to filter by. + + * **min\_num\_qubits** (`Optional`\[`int`]) – Minimum number of qubits the backend must have. + + * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. + + * **filters** (`Optional`\[`Callable`\[\[`List`\[[`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")]], `bool`]]) – + + More complex filters, such as lambda functions. For example: + + ```python + IBMProvider.backends(filters=lambda b: b.max_shots > 50000) + IBMProvider.backends(filters=lambda x: ("rz" in x.basis_gates ) + ``` + + * **\*\*kwargs** – + + Simple filters that require a specific value for an attribute in backend configuration, backend status, or provider credentials. Examples: + + ```python + # Get the operational real backends + IBMProvider.backends(simulator=False, operational=True) + # Get the backends with at least 127 qubits + IBMProvider.backends(min_num_qubits=127) + # Get the backends that support OpenPulse + IBMProvider.backends(open_pulse=True) + ``` + + For the full list of backend attributes, see the IBMBackend class documentation \<[api/qiskit/providers\_models](/api/qiskit/providers_models)> + + **Return type** + + `List`\[[`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")] + + **Returns** + + The list of available backends that match the filter. + + + ### delete\_account + + + Delete a saved account from disk. + + **Parameters** + + **name** (`Optional`\[`str`]) – Name of the saved account to delete. + + **Return type** + + `bool` + + **Returns** + + True if the account was deleted. False if no account was found. + + + ### get\_backend + + + Return a single backend matching the specified filtering. + + **Parameters** + + * **name** (*str*) – Name of the backend. + * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. + * **\*\*kwargs** – Dict used for filtering. + + **Returns** + + a backend matching the filtering. + + **Return type** + + Backend + + **Raises** + + * **QiskitBackendNotFoundError** – if no backend could be found or more than one backend matches the filtering criteria. + * [**IBMProviderValueError**](qiskit_ibm_provider.IBMProviderValueError "qiskit_ibm_provider.IBMProviderValueError") – If only one or two parameters from hub, group, project are specified. + + + ### instances + + + Return the IBM Quantum instances list currently in use for the session. + + **Return type** + + `List`\[`str`] + + **Returns** + + A list with instances currently in the session. + + + ### jobs + + + Return a list of jobs, subject to optional filtering. + + Retrieve jobs that match the given filters and paginate the results if desired. Note that the server has a limit for the number of jobs returned in a single call. As a result, this function might involve making several calls to the server. + + **Parameters** + + * **limit** (`Optional`\[`int`]) – Number of jobs to retrieve. `None` means no limit. Note that the number of sub-jobs within a composite job count towards the limit. + * **skip** (`int`) – Starting index for the job retrieval. + * **backend\_name** (`Optional`\[`str`]) – Name of the backend to retrieve jobs from. + * **status** (`Optional`\[`Literal`\[‘pending’, ‘completed’]]) – Filter jobs with either “pending” or “completed” status. + * **start\_datetime** (`Optional`\[`datetime`]) – Filter by the given start date, in local time. This is used to find jobs whose creation dates are after (greater than or equal to) this local date/time. + * **end\_datetime** (`Optional`\[`datetime`]) – Filter by the given end date, in local time. This is used to find jobs whose creation dates are before (less than or equal to) this local date/time. + * **job\_tags** (`Optional`\[`List`\[`str`]]) – Filter by tags assigned to jobs. Matched jobs are associated with all tags. + * **descending** (`bool`) – If `True`, return the jobs in descending order of the job creation date (i.e. newest first) until the limit is reached. + * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. + * **legacy** (`bool`) – If `True`, only retrieve jobs run from the deprecated `qiskit-ibmq-provider`. + * **Otherwise** – + * **qiskit-ibm-provider.** (*only retrieve jobs run from*) – + + **Return type** + + `List`\[`IBMJob`] + + **Returns** + + A list of `IBMJob` instances. + + + ### retrieve\_job + + + Return a single job. + + **Parameters** + + **job\_id** (`str`) – The ID of the job to retrieve. + + **Return type** + + `IBMJob` + + **Returns** + + The job with the given id. + + + ### save\_account + + + Save the account to disk for future use. + + **Parameters** + + * **token** (`Optional`\[`str`]) – IBM Quantum API token. + * **url** (`Optional`\[`str`]) – The API URL. Defaults to [https://auth.quantum-computing.ibm.com/api](https://auth.quantum-computing.ibm.com/api) + * **instance** (`Optional`\[`str`]) – The hub/group/project. + * **name** (`Optional`\[`str`]) – Name of the account to save. + * **proxies** (`Optional`\[`dict`]) – Proxy configuration. Supported optional keys are `urls` (a dictionary mapping protocol or protocol and host to the URL of the proxy, documented at [https://docs.python-requests.org/en/latest/api/#requests.Session.proxies](https://docs.python-requests.org/en/latest/api/#requests.Session.proxies)), `username_ntlm`, `password_ntlm` (username and password to enable NTLM user authentication) + * **verify** (`Optional`\[`bool`]) – Verify the server’s TLS certificate. + * **overwrite** (`Optional`\[`bool`]) – `True` if the existing account is to be overwritten. + + **Return type** + + `None` + + + ### saved\_accounts + + + List the accounts saved on disk. + + **Parameters** + + * **default** (`Optional`\[`bool`]) – If set to True, only default accounts are returned. + * **name** (`Optional`\[`str`]) – If set, only accounts with the given name are returned. + + **Return type** + + `dict` + + **Returns** + + A dictionary with information about the accounts saved on disk. + + **Raises** + + **ValueError** – If an invalid account is found on disk. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderError.mdx new file mode 100644 index 00000000000..88c672229b4 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMProviderError +description: API reference for qiskit_ibm_provider.IBMProviderError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMProviderError +--- + +# IBMProviderError + + + Base class for errors raise by IBMProvider. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderValueError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderValueError.mdx new file mode 100644 index 00000000000..465806a90ce --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.IBMProviderValueError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMProviderValueError +description: API reference for qiskit_ibm_provider.IBMProviderValueError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.IBMProviderValueError +--- + +# IBMProviderValueError + + + Value errors raised by IBMProvider. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.Session.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.Session.mdx new file mode 100644 index 00000000000..9afb796f6fe --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.Session.mdx @@ -0,0 +1,88 @@ +--- +title: Session +description: API reference for qiskit_ibm_provider.Session +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.Session +--- + +# Session + + + Class for creating a flexible Qiskit Runtime session. + + A Qiskit Runtime `session` allows you to group a collection of iterative calls to the quantum computer. A session is started when the first job within the session is started. Subsequent jobs within the session are prioritized by the scheduler. Data used within a session, such as transpiled circuits, is also cached to avoid unnecessary overhead. + + You can open a Qiskit Runtime session using this `Session` class and submit one or more jobs. + + **For example::** + + from qiskit\_ibm\_provider import IBMProvider + + \# Bell Circuit qr = QuantumRegister(2, name=”qr”) cr = ClassicalRegister(2, name=”cr”) qc = QuantumCircuit(qr, cr, name=”bell”) qc.h(qr\[0]) qc.cx(qr\[0], qr\[1]) qc.measure(qr, cr) + + backend = IBMProvider().get\_backend(“ibmq\_qasm\_simulator”) backend.open\_session() + + job = backend.run(qc) print(f”Job ID: \{job.job\_id()}”) print(f”Result: \{job.result()}”) # Close the session only if all jobs are finished and # you don’t need to run more in the session. backend.cancel\_session() + + Session can also be used as a context manager: + + ```python + with backend.open_session() as session: + job = backend.run(qc) + assert job.job_id() == session.session_id + ``` + + Session constructor. + + **Parameters** + + **max\_time** (`Union`\[`int`, `str`, `None`]) – (EXPERIMENTAL setting, can break between releases without warning) Maximum amount of time, a runtime session can be open before being forcibly closed. Can be specified as seconds (int) or a string like “2h 30m 40s”. This value must be in between 300 seconds and the [system imposed maximum](/run/max-execution-time). + + **Raises** + + **ValueError** – If an input value is invalid. + + ## Attributes + + ### active + + + Return the status of the session. + + **Return type** + + `bool` + + **Returns** + + True if the session is active, False otherwise. + + + ### session\_id + + + Return the session ID. + + **Return type** + + `str` + + **Returns** + + Session ID. None until a job runs in the session. + + + ## Methods + + ### cancel + + + Set the session.\_active status to False + + **Return type** + + `None` + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCircuitJob.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCircuitJob.mdx new file mode 100644 index 00000000000..54763b88421 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCircuitJob.mdx @@ -0,0 +1,557 @@ +--- +title: IBMCircuitJob +description: API reference for qiskit_ibm_provider.job.IBMCircuitJob +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.job.IBMCircuitJob +--- + +# IBMCircuitJob + + + Representation of a job that executes on an IBM Quantum backend. + + The job may be executed on a simulator or a real device. A new `IBMCircuitJob` instance is returned when you call `IBMBackend.run()` to submit a job to a particular backend. + + If the job is successfully submitted, you can inspect the job’s status by calling [`status()`](#qiskit_ibm_provider.job.IBMCircuitJob.status "qiskit_ibm_provider.job.IBMCircuitJob.status"). Job status can be one of the [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v1.0)") members. For example: + + ```python + from qiskit.providers.jobstatus import JobStatus + + job = backend.run(...) + + try: + job_status = job.status() # Query the backend server for job status. + if job_status is JobStatus.RUNNING: + print("The job is still running") + except IBMJobApiError as ex: + print("Something wrong happened!: {}".format(ex)) + ``` + + + An error may occur when querying the remote server to get job information. The most common errors are temporary network failures and server errors, in which case an [`IBMJobApiError`](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") is raised. These errors usually clear quickly, so retrying the operation is likely to succeed. + + + Some of the methods in this class are blocking, which means control may not be returned immediately. [`result()`](#qiskit_ibm_provider.job.IBMCircuitJob.result "qiskit_ibm_provider.job.IBMCircuitJob.result") is an example of a blocking method: + + ```python + job = backend.run(...) + + try: + job_result = job.result() # It will block until the job finishes. + print("The job finished with result {}".format(job_result)) + except JobError as ex: + print("Something wrong happened!: {}".format(ex)) + ``` + + Job information retrieved from the server is attached to the `IBMCircuitJob` instance as attributes. Given that Qiskit and the server can be updated independently, some of these attributes might be deprecated or experimental. Supported attributes can be retrieved via methods. For example, you can use [`creation_date()`](#qiskit_ibm_provider.job.IBMCircuitJob.creation_date "qiskit_ibm_provider.job.IBMCircuitJob.creation_date") to retrieve the job creation date, which is a supported attribute. + + IBMCircuitJob constructor. + + **Parameters** + + * **backend** ([`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")) – The backend instance used to run this job. + * **api\_client** (`AccountClient`) – Object for connecting to the server. + * **job\_id** (`str`) – Job ID. + * **creation\_date** (`Optional`\[`str`]) – Job creation date. + * **status** (`Optional`\[`str`]) – Job status returned by the server. + * **runtime\_client** (`Optional`\[`RuntimeClient`]) – Object for connecting to the runtime server + * **kind** (`Optional`\[`str`]) – Job type. + * **name** (`Optional`\[`str`]) – Job name. + * **time\_per\_step** (`Optional`\[`dict`]) – Time spent for each processing step. + * **result** (`Optional`\[`dict`]) – Job result. + * **error** (`Optional`\[`dict`]) – Job error. + * **tags** (`Optional`\[`List`\[`str`]]) – Job tags. + * **run\_mode** (`Optional`\[`str`]) – Scheduling mode the job runs in. + * **client\_info** (`Optional`\[`Dict`\[`str`, `str`]]) – Client information from the API. + * **kwargs** (`Any`) – Additional job attributes. + + ## Attributes + + ### client\_version + + + Return version of the client used for this job. + + **Return type** + + `Dict`\[`str`, `str`] + + **Returns** + + **Client version in dictionary format, where the key is the name** + + of the client and the value is the version. + + + ### usage\_estimation + + + Return usage estimation information for this job. + + **Return type** + + `Dict`\[`str`, `Any`] + + **Returns** + + `quantum_seconds` which is the estimated quantum time of the job in seconds. Quantum time represents the time that the QPU complex is occupied exclusively by the job. + + + ### version + + + + ## Methods + + ### backend + + + Return the backend where this job was executed. + + **Return type** + + [`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v1.0)") + + + ### backend\_options + + + Return the backend configuration options used for this job. + + Options that are not applicable to the job execution are not returned. Some but not all of the options with default values are returned. You can use [`qiskit_ibm_provider.IBMBackend.options`](qiskit_ibm_provider.IBMBackend#options "qiskit_ibm_provider.IBMBackend.options") to see all backend options. + + **Return type** + + `Dict` + + **Returns** + + Backend options used for this job. An empty dictionary is returned if the options cannot be retrieved. + + + ### cancel + + + Attempt to cancel the job. + + + Depending on the state the job is in, it might be impossible to cancel the job. + + + **Return type** + + `bool` + + **Returns** + + `True` if the job is cancelled, else `False`. + + **Raises** + + * [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If the job is in a state that cannot be cancelled. + * [**IBMJobError**](qiskit_ibm_provider.job.IBMJobError "qiskit_ibm_provider.job.IBMJobError") – If unable to cancel job. + + + ### cancelled + + + Return whether the job has been cancelled. + + **Return type** + + `bool` + + + ### circuits + + + Return the circuits for this job. + + **Return type** + + `List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)")] + + **Returns** + + The circuits or for this job. An empty list is returned if the circuits cannot be retrieved (for example, if the job uses an old format that is no longer supported). + + + ### creation\_date + + + Return job creation date, in local time. + + **Return type** + + `datetime` + + **Returns** + + The job creation date as a datetime object, in local time. + + + ### done + + + Return whether the job has successfully run. + + **Return type** + + `bool` + + + ### error\_message + + + Provide details about the reason of failure. + + **Return type** + + `Optional`\[`str`] + + **Returns** + + An error report if the job failed or `None` otherwise. + + + ### header + + + Return the user header specified for this job. + + **Return type** + + `Dict` + + **Returns** + + User header specified for this job. An empty dictionary is returned if the header cannot be retrieved. + + + ### in\_final\_state + + + Return whether the job is in a final job state such as `DONE` or `ERROR`. + + **Return type** + + `bool` + + + ### job\_id + + + Return the job ID assigned by the server. + + **Return type** + + `str` + + **Returns** + + Job ID. + + + ### name + + + Return the name assigned to this job. + + **Return type** + + `Optional`\[`str`] + + **Returns** + + Job name or `None` if no name was assigned to this job. + + + ### properties + + + Return the backend properties for this job. + + **Parameters** + + **refresh** (`bool`) – If `True`, re-query the server for the backend properties. Otherwise, return a cached version. + + **Return type** + + `Optional`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v1.0)")] + + **Returns** + + The backend properties used for this job, at the time the job was run, or `None` if properties are not available. + + + ### queue\_info + + + Return queue information for this job. + + The queue information may include queue position, estimated start and end time, and dynamic priorities for the hub, group, and project. See [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") for more information. + + + The queue information is calculated after the job enters the queue. Therefore, some or all of the information may not be immediately available, and this method may return `None`. + + + **Return type** + + `Optional`\[[`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.queueinfo.QueueInfo")] + + **Returns** + + A [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") instance that contains queue information for this job, or `None` if queue information is unknown or not applicable. + + + ### queue\_position + + + Return the position of the job in the server queue. + + + The position returned is within the scope of the provider and may differ from the global queue position. + + + **Parameters** + + **refresh** (`bool`) – If `True`, re-query the server to get the latest value. Otherwise return the cached value. + + **Return type** + + `Optional`\[`int`] + + **Returns** + + Position in the queue or `None` if position is unknown or not applicable. + + + ### refresh + + + Obtain the latest job information from the server. + + This method may add additional attributes to this job instance, if new information becomes available. + + **Raises** + + [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + **Return type** + + `None` + + + ### result + + + Return the result of the job. + + + Some IBM Quantum job results can only be read once. A second attempt to query the server for the same job will fail, since the job has already been “consumed”. + + The first call to this method in an `IBMCircuitJob` instance will query the server and consume any available job results. Subsequent calls to that instance’s `result()` will also return the results, since they are cached. However, attempting to retrieve the results again in another instance or session might fail due to the job results having been consumed. + + + + When partial=True, this method will attempt to retrieve partial results of failed jobs. In this case, precaution should be taken when accessing individual experiments, as doing so might cause an exception. The `success` attribute of the returned [`Result`](/api/qiskit/qiskit.result.Result "(in Qiskit v1.0)") instance can be used to verify whether it contains partial results. + + For example, if one of the experiments in the job failed, trying to get the counts of the unsuccessful experiment would raise an exception since there are no counts to return: + + ```python + try: + counts = result.get_counts("failed_experiment") + except QiskitError: + print("Experiment failed!") + ``` + + + If the job failed, you can use [`error_message()`](#qiskit_ibm_provider.job.IBMCircuitJob.error_message "qiskit_ibm_provider.job.IBMCircuitJob.error_message") to get more information. + + **Parameters** + + * **timeout** (`Optional`\[`float`]) – Number of seconds to wait for job. + * **refresh** (`bool`) – If `True`, re-query the server for the result. Otherwise return the cached value. + + **Return type** + + [`Result`](/api/qiskit/qiskit.result.Result "(in Qiskit v1.0)") + + **Returns** + + Job result. + + **Raises** + + * [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If the job was cancelled. + * [**IBMJobFailureError**](qiskit_ibm_provider.job.IBMJobFailureError "qiskit_ibm_provider.job.IBMJobFailureError") – If the job failed. + * [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + + ### running + + + Return whether the job is actively running. + + **Return type** + + `bool` + + + ### scheduling\_mode + + + Return the scheduling mode the job is in. + + **Return type** + + `Optional`\[`str`] + + **Returns** + + The scheduling mode the job is in or `None` if the information is not available. + + + ### status + + + Query the server for the latest job status. + + + This method is not designed to be invoked repeatedly in a loop for an extended period of time. Doing so may cause the server to reject your request. Use [`wait_for_final_state()`](#qiskit_ibm_provider.job.IBMCircuitJob.wait_for_final_state "qiskit_ibm_provider.job.IBMCircuitJob.wait_for_final_state") if you want to wait for the job to finish. + + + + If the job failed, you can use [`error_message()`](#qiskit_ibm_provider.job.IBMCircuitJob.error_message "qiskit_ibm_provider.job.IBMCircuitJob.error_message") to get more information. + + + **Return type** + + [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v1.0)") + + **Returns** + + The status of the job. + + **Raises** + + [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + + ### submit + + + Unsupported method. + + + This method is not supported, please use `run()` to submit a job. + + + **Raises** + + **NotImplementedError** – Upon invocation. + + **Return type** + + `None` + + + ### tags + + + Return the tags assigned to this job. + + **Return type** + + `List`\[`str`] + + **Returns** + + Tags assigned to this job. + + + ### time\_per\_step + + + Return the date and time information on each step of the job processing. + + The output dictionary contains the date and time information on each step of the job processing, in local time. The keys of the dictionary are the names of the steps, and the values are the date and time data, as a datetime object with local timezone info. For example: + + ```python + {'CREATING': datetime(2020, 2, 13, 15, 19, 25, 717000, tzinfo=tzlocal(), + 'CREATED': datetime(2020, 2, 13, 15, 19, 26, 467000, tzinfo=tzlocal(), + 'VALIDATING': datetime(2020, 2, 13, 15, 19, 26, 527000, tzinfo=tzlocal()} + ``` + + **Return type** + + `Optional`\[`Dict`] + + **Returns** + + Date and time information on job processing steps, in local time, or `None` if the information is not yet available. + + + ### update\_name + + + Update the name associated with this job. + + **Parameters** + + **name** (`str`) – The new name for this job. + + **Return type** + + `str` + + **Returns** + + The new name associated with this job. + + + ### update\_tags + + + Update the tags associated with this job. + + **Parameters** + + **new\_tags** (`List`\[`str`]) – New tags to assign to the job. + + **Return type** + + `List`\[`str`] + + **Returns** + + The new tags associated with this job. + + **Raises** + + * [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server or updating the job tags. + * [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If none of the input parameters are specified or if any of the input parameters are invalid. + + + ### wait\_for\_final\_state + + + **Use the websocket server to wait for the final the state of a job. The server** + + will remain open if the job is still running and the connection will be terminated once the job completes. Then update and return the status of the job. + + **Parameters** + + **timeout** (`Optional`\[`float`]) – Seconds to wait for the job. If `None`, wait indefinitely. + + **Raises** + + [**IBMJobTimeoutError**](qiskit_ibm_provider.job.IBMJobTimeoutError "qiskit_ibm_provider.job.IBMJobTimeoutError") – If the job does not complete within given timeout. + + **Return type** + + `None` + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCompositeJob.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCompositeJob.mdx new file mode 100644 index 00000000000..2f520b2af14 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMCompositeJob.mdx @@ -0,0 +1,685 @@ +--- +title: IBMCompositeJob +description: API reference for qiskit_ibm_provider.job.IBMCompositeJob +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.job.IBMCompositeJob +--- + +# IBMCompositeJob + + + Representation of a set of jobs that execute on an IBM Quantum backend. + + An `IBMCompositeJob` instance is returned when you call `IBMBackend.run()` to submit a list of circuits whose length exceeds the maximum allowed by the backend or by the `max_circuits_per_job` parameter. + + This `IBMCompositeJob` instance manages all the sub-jobs for you and can be used like a traditional job instance. For example, you can continue to use methods like [`status()`](#qiskit_ibm_provider.job.IBMCompositeJob.status "qiskit_ibm_provider.job.IBMCompositeJob.status") and [`result()`](#qiskit_ibm_provider.job.IBMCompositeJob.result "qiskit_ibm_provider.job.IBMCompositeJob.result") to get the job status and result, respectively. + + You can also retrieve a previously executed `IBMCompositeJob` using the `job()` and [`jobs()`](qiskit_ibm_provider.IBMBackendService#jobs "qiskit_ibm_provider.IBMBackendService.jobs") methods, like you would with traditional jobs. + + `IBMCompositeJob` also allows you to re-run failed jobs, using the [`rerun_failed()`](#qiskit_ibm_provider.job.IBMCompositeJob.rerun_failed "qiskit_ibm_provider.job.IBMCompositeJob.rerun_failed") method. This method will re-submit all failed or cancelled sub-jobs. Any circuits that failed to be submitted (e.g. due to server error) will only be re-submitted if the circuits are known. That is, if this `IBMCompositeJob` was returned by [`qiskit_ibm_provider.IBMBackend.run()`](qiskit_ibm_provider.IBMBackend#run "qiskit_ibm_provider.IBMBackend.run") and not retrieved from the server. + + Some of the methods in this class are blocking, which means control may not be returned immediately. [`result()`](#qiskit_ibm_provider.job.IBMCompositeJob.result "qiskit_ibm_provider.job.IBMCompositeJob.result") is an example of a blocking method, and control will return only after all sub-jobs finish. + + `IBMCompositeJob` uses job tags to identify sub-jobs. It is therefore important to preserve these tags. All tags used internally by `IBMCompositeJob` start with `ibm_composite_job_`. + + IBMCompositeJob constructor. + + **Parameters** + + * **backend** ([`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")) – The backend instance used to run this job. + * **api\_client** (`AccountClient`) – Object for connecting to the server. + * **job\_id** (`Optional`\[`str`]) – Job ID. + * **creation\_date** (`Optional`\[`datetime`]) – Job creation date. + * **jobs** (`Optional`\[`List`\[[`IBMCircuitJob`](qiskit_ibm_provider.job.IBMCircuitJob "qiskit_ibm_provider.job.ibm_circuit_job.IBMCircuitJob")]]) – A list of sub-jobs. + * **circuits\_list** (`Optional`\[`List`\[`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)")]]]) – Circuits for this job. + * **run\_config** (`Optional`\[`Dict`]) – Runtime configuration for this job. + * **name** (`Optional`\[`str`]) – Job name. + * **tags** (`Optional`\[`List`\[`str`]]) – Job tags. + * **client\_version** (`Optional`\[`Dict`]) – Client used for the job. + + **Raises** + + [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If one or more subjobs is missing. + + ## Attributes + + ### client\_version + + + Return version of the client used for this job. + + **Return type** + + `Dict`\[`str`, `str`] + + **Returns** + + **Client version in dictionary format, where the key is the name** + + of the client and the value is the version. An empty dictionary is returned if the information is not yet known. + + + ### version + + + + ## Methods + + ### backend + + + Return the backend where this job was executed. + + **Return type** + + [`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v1.0)") + + + ### backend\_options + + + Return the backend configuration options used for this job. + + Options that are not applicable to the job execution are not returned. Some but not all of the options with default values are returned. You can use [`qiskit_ibm_provider.IBMBackend.options`](qiskit_ibm_provider.IBMBackend#options "qiskit_ibm_provider.IBMBackend.options") to see all backend options. + + **Return type** + + `Dict`\[`str`, `Any`] + + **Returns** + + Backend options used for this job. + + + ### block\_for\_submit + + + Block until all sub-jobs are submitted. + + **Return type** + + `None` + + + ### cancel + + + Attempt to cancel the job. + + + Depending on the state the job is in, it might be impossible to cancel the job. + + + **Return type** + + `bool` + + **Returns** + + `True` if the job is cancelled, else `False`. + + **Raises** + + [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + + ### cancelled + + + Return whether the job has been cancelled. + + **Return type** + + `bool` + + + ### circuits + + + Return the circuits for this job. + + **Return type** + + `List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)")] + + **Returns** + + The circuits for this job. + + + ### creation\_date + + + Return job creation date, in local time. + + **Return type** + + `Optional`\[`datetime`] + + **Returns** + + The job creation date as a datetime object, in local time, or `None` if job submission hasn’t finished or failed. + + + ### done + + + Return whether the job has successfully run. + + **Return type** + + `bool` + + + ### error\_message + + + Provide details about the reason of failure. + + + This method blocks until the job finishes. + + + **Return type** + + `Optional`\[`str`] + + **Returns** + + An error report if the job failed or `None` otherwise. + + + ### from\_jobs + + + Return an instance of this class. + + The input job ID is used to query for sub-job information from the server. + + **Parameters** + + * **job\_id** (`str`) – Job ID. + * **jobs** (`List`\[[`IBMCircuitJob`](qiskit_ibm_provider.job.IBMCircuitJob "qiskit_ibm_provider.job.ibm_circuit_job.IBMCircuitJob")]) – A list of circuit jobs that belong to this composite job. + * **api\_client** (`AccountClient`) – Client to use to communicate with the server. + + **Return type** + + [`IBMCompositeJob`](#qiskit_ibm_provider.job.IBMCompositeJob "qiskit_ibm_provider.job.ibm_composite_job.IBMCompositeJob") + + **Returns** + + An instance of this class. + + + ### header + + + Return the user header specified for this job. + + **Return type** + + `Dict` + + **Returns** + + User header specified for this job. An empty dictionary is returned if the header cannot be retrieved. + + + ### in\_final\_state + + + Return whether the job is in a final job state such as `DONE` or `ERROR`. + + **Return type** + + `bool` + + + ### job\_id + + + Return a unique id identifying the job. + + **Return type** + + `str` + + + ### name + + + Return the name assigned to this job. + + **Return type** + + `Optional`\[`str`] + + **Returns** + + Job name or `None` if no name was assigned to this job. + + + ### properties + + + Return the backend properties for this job. + + > **Args:** + > + > **refresh: If `True`, re-query the server for the backend properties.** + > + > Otherwise, return a cached version. + + + This method blocks until all sub-jobs are submitted. + + + **Return type** + + `Union`\[`List`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v1.0)")], [`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v1.0)"), `None`] + + **Returns** + + The backend properties used for this job, or `None` if properties are not available. A list of backend properties is returned if the sub-jobs used different properties. + + **Raises** + + [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + + ### queue\_info + + + Return queue information for this job. + + This method returns the queue information of the sub-job that is last in queue. + + The queue information may include queue position, estimated start and end time, and dynamic priorities for the hub, group, and project. See [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") for more information. + + + The queue information is calculated after the job enters the queue. Therefore, some or all of the information may not be immediately available, and this method may return `None`. + + + **Return type** + + `Optional`\[[`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.queueinfo.QueueInfo")] + + **Returns** + + A [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") instance that contains queue information for this job, or `None` if queue information is unknown or not applicable. + + + ### queue\_position + + + Return the position of the job in the server queue. + + This method returns the queue position of the sub-job that is last in queue. + + + The position returned is within the scope of the provider and may differ from the global queue position. + + + **Parameters** + + **refresh** (`bool`) – If `True`, re-query the server to get the latest value. Otherwise return the cached value. + + **Return type** + + `Optional`\[`int`] + + **Returns** + + Position in the queue or `None` if position is unknown or not applicable. + + + ### refresh + + + Obtain the latest job information from the server. + + This method may add additional attributes to this job instance, if new information becomes available. + + **Raises** + + [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + **Return type** + + `None` + + + ### report + + + Return a report on current sub-job statuses. + + **Parameters** + + **detailed** (`bool`) – If `True`, return a detailed report. Otherwise return a summary report. + + **Return type** + + `str` + + **Returns** + + A report on sub-job statuses. + + + ### rerun\_failed + + + Re-submit all failed sub-jobs. + + + All sub-jobs that are in “ERROR” or “CANCELLED” states will be re-submitted. Sub-jobs that failed to be submitted will only be re-submitted if the circuits are known. That is, if this `IBMCompositeJob` was returned by [`qiskit_ibm_provider.IBMBackend.run()`](qiskit_ibm_provider.IBMBackend#run "qiskit_ibm_provider.IBMBackend.run") and not retrieved from the server. + + + **Return type** + + `None` + + + ### result + + + Return the result of the job. + + + This method blocks until all sub-jobs finish. + + + + Some IBM Quantum job results can only be read once. A second attempt to query the server for the same job will fail, since the job has already been “consumed”. + + The first call to this method in an `IBMCompositeJob` instance will query the server and consume any available job results. Subsequent calls to that instance’s `result()` will also return the results, since they are cached. However, attempting to retrieve the results again in another instance or session might fail due to the job results having been consumed. + + + + When partial=True, this method will attempt to retrieve partial results of failed jobs. In this case, precaution should be taken when accessing individual experiments, as doing so might cause an exception. The `success` attribute of the returned [`Result`](/api/qiskit/qiskit.result.Result "(in Qiskit v1.0)") instance can be used to verify whether it contains partial results. + + For example, if one of the circuits in the job failed, trying to get the counts of the unsuccessful circuit would raise an exception since there are no counts to return: + + ```python + try: + counts = result.get_counts("failed_circuit") + except QiskitError: + print("Circuit execution failed!") + ``` + + + If the job failed, you can use [`error_message()`](#qiskit_ibm_provider.job.IBMCompositeJob.error_message "qiskit_ibm_provider.job.IBMCompositeJob.error_message") to get more information. + + **Parameters** + + * **timeout** (`Optional`\[`float`]) – Number of seconds to wait for job. + * **wait** (`float`) – Time in seconds between queries. + * **partial** (`bool`) – If `True`, return partial results if possible. Partial results refer to experiments within a sub-job, not individual sub-jobs. That is, this method will still block until all sub-jobs finish even if partial is set to `True`. + * **refresh** (`bool`) – If `True`, re-query the server for the result. Otherwise return the cached value. + + **Return type** + + [`Result`](/api/qiskit/qiskit.result.Result "(in Qiskit v1.0)") + + **Returns** + + Job result. + + **Raises** + + * [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If the job was cancelled. + * [**IBMJobFailureError**](qiskit_ibm_provider.job.IBMJobFailureError "qiskit_ibm_provider.job.IBMJobFailureError") – If the job failed. + * [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + + ### running + + + Return whether the job is actively running. + + **Return type** + + `bool` + + + ### scheduling\_mode + + + Return the scheduling mode the job is in. + + The scheduling mode indicates how the job is scheduled to run. For example, `fairshare` indicates the job is scheduled using a fairshare algorithm. + + `fairshare` is returned if any of the sub-jobs has scheduling mode of `fairshare`. + + This information is only available if the job status is `RUNNING` or `DONE`. + + **Return type** + + `Optional`\[`str`] + + **Returns** + + The scheduling mode the job is in or `None` if the information is not available. + + + ### status + + + Query the server for the latest job status. + + + This method is not designed to be invoked repeatedly in a loop for an extended period of time. Doing so may cause the server to reject your request. Use [`wait_for_final_state()`](#qiskit_ibm_provider.job.IBMCompositeJob.wait_for_final_state "qiskit_ibm_provider.job.IBMCompositeJob.wait_for_final_state") if you want to wait for the job to finish. + + + + If the job failed, you can use [`error_message()`](#qiskit_ibm_provider.job.IBMCompositeJob.error_message "qiskit_ibm_provider.job.IBMCompositeJob.error_message") to get more information. + + + + Since this job contains multiple sub-jobs, the returned status is mapped in the following order: + + > * INITIALIZING - if any sub-job is being initialized. + > * VALIDATING - if any sub-job is being validated. + > * QUEUED - if any sub-job is queued. + > * RUNNING - if any sub-job is still running. + > * ERROR - if any sub-job incurred an error. + > * CANCELLED - if any sub-job is cancelled. + > * DONE - if all sub-jobs finished. + + + **Return type** + + [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v1.0)") + + **Returns** + + The status of the job. + + **Raises** + + [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. + + + ### sub\_job + + + Retrieve the job used to submit the specified circuit. + + **Parameters** + + **circuit\_index** (`int`) – Index of the circuit whose job is to be returned. + + **Return type** + + `Optional`\[[`IBMCircuitJob`](qiskit_ibm_provider.job.IBMCircuitJob "qiskit_ibm_provider.job.ibm_circuit_job.IBMCircuitJob")] + + **Returns** + + The Job submitted for the circuit, or `None` if the job has not been submitted or the submit failed. + + **Raises** + + [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If the circuit index is out of range. + + + ### sub\_jobs + + + Return all submitted sub-jobs. + + **Parameters** + + **block\_for\_submit** (`bool`) – `True` if this method should block until all sub-jobs are submitted. `False` if the method should return immediately with submitted sub-jobs, if any. + + **Return type** + + `List`\[[`IBMCircuitJob`](qiskit_ibm_provider.job.IBMCircuitJob "qiskit_ibm_provider.job.ibm_circuit_job.IBMCircuitJob")] + + **Returns** + + All submitted sub-jobs. + + + ### submit + + + Unsupported method. + + + This method is not supported, please use `run()` to submit a job. + + + **Raises** + + **NotImplementedError** – Upon invocation. + + **Return type** + + `None` + + + ### tags + + + Return the tags assigned to this job. + + **Return type** + + `List`\[`str`] + + **Returns** + + Tags assigned to this job. + + + ### time\_per\_step + + + Return the date and time information on each step of the job processing. + + The output dictionary contains the date and time information on each step of the job processing, in local time. The keys of the dictionary are the names of the steps, and the values are the date and time data, as a datetime object with local timezone info. For example: + + ```python + {'CREATING': datetime(2020, 2, 13, 15, 19, 25, 717000, tzinfo=tzlocal(), + 'CREATED': datetime(2020, 2, 13, 15, 19, 26, 467000, tzinfo=tzlocal(), + 'VALIDATING': datetime(2020, 2, 13, 15, 19, 26, 527000, tzinfo=tzlocal()} + ``` + + **Return type** + + `Optional`\[`Dict`] + + **Returns** + + Date and time information on job processing steps, in local time, or `None` if the information is not yet available. + + + ### update\_name + + + Update the name associated with this job. + + + This method blocks until all sub-jobs are submitted. + + + **Parameters** + + **name** (`str`) – The new name for this job. + + **Return type** + + `str` + + **Returns** + + The new name associated with this job. + + **Raises** + + * [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server or updating the job name. + * [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If the input job name is not a string. + + + ### update\_tags + + + Update the tags associated with this job. + + + This method blocks until all sub-jobs are submitted. + + + **Parameters** + + **new\_tags** (`List`\[`str`]) – New tags to assign to the job. + + **Return type** + + `List`\[`str`] + + **Returns** + + The new tags associated with this job. + + **Raises** + + * [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server or updating the job tags. + * [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If none of the input parameters are specified or if any of the input parameters are invalid. + + + ### wait\_for\_final\_state + + + Wait until the job progresses to a final state such as `DONE` or `ERROR`. + + **Parameters** + + * **timeout** (`Optional`\[`float`]) – Seconds to wait for the job. If `None`, wait indefinitely. + + * **wait** (`Optional`\[`float`]) – Seconds to wait between invoking the callback function. If `None`, the callback function is invoked only if job status or queue position has changed. + + * **callback** (`Optional`\[`Callable`]) – + + Callback function invoked after each querying iteration. The following positional arguments are provided to the callback function: + + > * job\_id: Job ID + > * job\_status: Status of the job from the last query. + > * job: This `IBMCompositeJob` instance. + + In addition, the following keyword arguments are also provided: + + > * queue\_info: A [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") instance with job queue information, or `None` if queue information is unknown or not applicable. You can use the `to_dict()` method to convert the [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") instance to a dictionary, if desired. + + **Raises** + + [**IBMJobTimeoutError**](qiskit_ibm_provider.job.IBMJobTimeoutError "qiskit_ibm_provider.job.IBMJobTimeoutError") – if the job does not reach a final state before the specified timeout. + + **Return type** + + `None` + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobApiError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobApiError.mdx new file mode 100644 index 00000000000..6bd18edd0a7 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobApiError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMJobApiError +description: API reference for qiskit_ibm_provider.job.IBMJobApiError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.job.IBMJobApiError +--- + +# IBMJobApiError + + + Errors that occur unexpectedly when querying the server. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobError.mdx new file mode 100644 index 00000000000..d74af418e7d --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMJobError +description: API reference for qiskit_ibm_provider.job.IBMJobError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.job.IBMJobError +--- + +# IBMJobError + + + Base class for errors raised by the job modules. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobFailureError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobFailureError.mdx new file mode 100644 index 00000000000..97a26493799 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobFailureError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMJobFailureError +description: API reference for qiskit_ibm_provider.job.IBMJobFailureError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.job.IBMJobFailureError +--- + +# IBMJobFailureError + + + Errors raised when a job failed. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx new file mode 100644 index 00000000000..8d565dd0d68 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMJobInvalidStateError +description: API reference for qiskit_ibm_provider.job.IBMJobInvalidStateError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.job.IBMJobInvalidStateError +--- + +# IBMJobInvalidStateError + + + Errors raised when a job is not in a valid state for the operation. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx new file mode 100644 index 00000000000..3098f64e6d4 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx @@ -0,0 +1,16 @@ +--- +title: IBMJobTimeoutError +description: API reference for qiskit_ibm_provider.job.IBMJobTimeoutError +in_page_toc_min_heading_level: 1 +python_api_type: exception +python_api_name: qiskit_ibm_provider.job.IBMJobTimeoutError +--- + +# IBMJobTimeoutError + + + Errors raised when a job operation times out. + + Set the error message. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.QueueInfo.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.QueueInfo.mdx new file mode 100644 index 00000000000..deb265cc4fc --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.QueueInfo.mdx @@ -0,0 +1,66 @@ +--- +title: QueueInfo +description: API reference for qiskit_ibm_provider.job.QueueInfo +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.job.QueueInfo +--- + +# QueueInfo + + + Queue information for a job. + + QueueInfo constructor. + + **Parameters** + + * **position** – Position in the queue. + * **status** (`Optional`\[`str`]) – Job status. + * **estimated\_start\_time** (`Union`\[`str`, `datetime`, `None`]) – Estimated start time for the job, in UTC. + * **estimated\_complete\_time** – Estimated complete time for the job, in UTC. + * **hub\_priority** (`Optional`\[`float`]) – Dynamic priority for the hub. + * **group\_priority** (`Optional`\[`float`]) – Dynamic priority for the group. + * **project\_priority** (`Optional`\[`float`]) – Dynamic priority for the project. + * **job\_id** (`Optional`\[`str`]) – Job ID. + * **kwargs** (`Any`) – Additional attributes. + + ## Attributes + + ### estimated\_complete\_time + + + Return estimated complete time in local time. + + **Return type** + + `Optional`\[`datetime`] + + + ### estimated\_start\_time + + + Return estimated start time in local time. + + **Return type** + + `Optional`\[`datetime`] + + + ## Methods + + ### format + + + Build a user-friendly report for the job queue information. + + **Return type** + + `str` + + **Returns** + + The job queue information report. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.job_monitor.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.job_monitor.mdx new file mode 100644 index 00000000000..bba6b476d4e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.job.job_monitor.mdx @@ -0,0 +1,26 @@ +--- +title: job_monitor +description: API reference for qiskit_ibm_provider.job.job_monitor +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.job.job_monitor +--- + + + +# job\_monitor + + + Monitor the status of an `IBMJob` instance. + + **Parameters** + + * **job** (`IBMJob`) – Job to monitor. + * **interval** (`Optional`\[`float`]) – Time interval between status queries. + * **output** (`TextIO`) – The file like object to write status messages to. By default this is sys.stdout. + + **Return type** + + `None` + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.least_busy.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.least_busy.mdx new file mode 100644 index 00000000000..d91b25ef9b7 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.least_busy.mdx @@ -0,0 +1,34 @@ +--- +title: least_busy +description: API reference for qiskit_ibm_provider.least_busy +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.least_busy +--- + + + +# least\_busy + + + Return the least busy backend from a list. + + Return the least busy available backend for those that have a `pending_jobs` in their `status`. Note that local backends may not have this attribute. + + **Parameters** + + **backends** (`List`\[[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v1.0)")]) – The backends to choose from. + + **Return type** + + [`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v1.0)") + + **Returns** + + The backend with the fewest number of pending jobs. + + **Raises** + + [**IBMError**](qiskit_ibm_provider.IBMError "qiskit_ibm_provider.IBMError") – If the backends list is empty, or if none of the backends is available, or if a backend in the list does not have the `pending_jobs` attribute in its status. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.basis.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.basis.mdx new file mode 100644 index 00000000000..1829954ec20 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.basis.mdx @@ -0,0 +1,22 @@ +--- +title: basis +description: API reference for qiskit_ibm_provider.transpiler.passes.basis +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.transpiler.passes.basis +--- + + + +# basis + + + +## Basis + + + +`qiskit_ibm_provider.transpiler.passes.basis` + +Passes to layout circuits to IBM backend’s instruction sets. + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.mdx new file mode 100644 index 00000000000..b367f821f78 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.mdx @@ -0,0 +1,27 @@ +--- +title: passes +description: API reference for qiskit_ibm_provider.transpiler.passes +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.transpiler.passes +--- + + + +# passes + + + +## Transpiler Passes + + + +`qiskit_ibm_provider.transpiler.passes` + +A collection of transpiler passes for IBM backends. + +| | | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | +| [`basis`](qiskit_ibm_provider.transpiler.passes.basis#module-qiskit_ibm_provider.transpiler.passes.basis "qiskit_ibm_provider.transpiler.passes.basis") | Basis (qiskit\_ibm\_provider.transpiler.passes.basis) | +| [`scheduling`](qiskit_ibm_provider.transpiler.passes.scheduling#module-qiskit_ibm_provider.transpiler.passes.scheduling "qiskit_ibm_provider.transpiler.passes.scheduling") | Scheduling (qiskit\_ibm\_provider.transpiler.passes.scheduling) | + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx new file mode 100644 index 00000000000..7ea503eff1b --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx @@ -0,0 +1,141 @@ +--- +title: ALAPScheduleAnalysis +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis +--- + +# ALAPScheduleAnalysis + + + Dynamic circuits as-late-as-possible (ALAP) scheduling analysis pass. + + This is a scheduler designed to work for the unique scheduling constraints of the dynamic circuits backends due to the limitations imposed by hardware. This is expected to evolve over time as the dynamic circuit backends also change. + + In its current form this is similar to Qiskit’s ALAP scheduler in which instructions start as late as possible. + + The primary differences are that: + + * **Resets and control-flow currently trigger the end of a “quantum block”. The period between the end** + + of the block and the next is *nondeterministic* ie., we do not know when the next block will begin (as we could be evaluating a classical function of nondeterministic length) and therefore the next block starts at a *relative* t=0. + + * During a measurement it is possible to apply gates in parallel on disjoint qubits. + + * Measurements and resets on disjoint qubits happen simultaneously and are part of the same block. + + Scheduler for dynamic circuit backends. + + **Parameters** + + **durations** ([`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v1.0)")) – Durations of instructions to be used in scheduling. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + + ## Methods + + ### \_\_call\_\_ + + + Runs the pass on circuit. + + **Parameters** + + * **circuit** (*QuantumCircuit*) – The dag on which the pass is run. + * **property\_set** (*PropertySet | dict | None*) – Input/output property set. An analysis pass might change the property set in-place. + + **Return type** + + QuantumCircuit + + **Returns** + + If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. + + + ### execute + + + Execute optimization task for input Qiskit IR. + + **Parameters** + + * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – State associated with workflow execution by the pass manager itself. + * **callback** (`Optional`\[`Callable`]) – A callback function which is caller per execution of optimization task. + + **Return type** + + `tuple`\[`Any`, [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")] + + **Returns** + + Optimized Qiskit IR and state of the workflow. + + + ### name + + + Name of the pass. + + **Return type** + + `str` + + + ### run + + + Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)") :param dag: DAG to schedule. :type dag: DAGCircuit + + **Raises** + + * **TranspilerError** – if the circuit is not mapped on physical qubits. + * **TranspilerError** – if conditional bit is added to non-supported instruction. + + **Return type** + + `None` + + **Returns** + + The scheduled DAGCircuit. + + + ### update\_status + + + Update workflow status. + + **Parameters** + + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – Pass manager state to update. + * **run\_state** (`RunState`) – Completion status of current task. + + **Return type** + + [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)") + + **Returns** + + Updated pass manager state. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx new file mode 100644 index 00000000000..88f645ff5c0 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx @@ -0,0 +1,141 @@ +--- +title: ASAPScheduleAnalysis +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis +--- + +# ASAPScheduleAnalysis + + + Dynamic circuits as-soon-as-possible (ASAP) scheduling analysis pass. + + This is a scheduler designed to work for the unique scheduling constraints of the dynamic circuits backends due to the limitations imposed by hardware. This is expected to evolve over time as the dynamic circuit backends also change. + + In its current form this is similar to Qiskit’s ASAP scheduler in which instructions start as early as possible. + + The primary differences are that: + + * **Resets and control-flow currently trigger the end of a “quantum block”. The period between the end** + + of the block and the next is *nondeterministic* ie., we do not know when the next block will begin (as we could be evaluating a classical function of nondeterministic length) and therefore the next block starts at a *relative* t=0. + + * During a measurement it is possible to apply gates in parallel on disjoint qubits. + + * Measurements and resets on disjoint qubits happen simultaneously and are part of the same block. + + Scheduler for dynamic circuit backends. + + **Parameters** + + **durations** ([`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v1.0)")) – Durations of instructions to be used in scheduling. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + + ## Methods + + ### \_\_call\_\_ + + + Runs the pass on circuit. + + **Parameters** + + * **circuit** (*QuantumCircuit*) – The dag on which the pass is run. + * **property\_set** (*PropertySet | dict | None*) – Input/output property set. An analysis pass might change the property set in-place. + + **Return type** + + QuantumCircuit + + **Returns** + + If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. + + + ### execute + + + Execute optimization task for input Qiskit IR. + + **Parameters** + + * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – State associated with workflow execution by the pass manager itself. + * **callback** (`Optional`\[`Callable`]) – A callback function which is caller per execution of optimization task. + + **Return type** + + `tuple`\[`Any`, [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")] + + **Returns** + + Optimized Qiskit IR and state of the workflow. + + + ### name + + + Name of the pass. + + **Return type** + + `str` + + + ### run + + + Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)") :param dag: DAG to schedule. :type dag: DAGCircuit + + **Raises** + + * **TranspilerError** – if the circuit is not mapped on physical qubits. + * **TranspilerError** – if conditional bit is added to non-supported instruction. + + **Return type** + + [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)") + + **Returns** + + The scheduled DAGCircuit. + + + ### update\_status + + + Update workflow status. + + **Parameters** + + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – Pass manager state to update. + * **run\_state** (`RunState`) – Completion status of current task. + + **Return type** + + [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)") + + **Returns** + + Updated pass manager state. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx new file mode 100644 index 00000000000..642ebefca36 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx @@ -0,0 +1,135 @@ +--- +title: BlockBasePadder +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder +--- + +# BlockBasePadder + + + The base class of padding pass. + + This pass requires one of scheduling passes to be executed before itself. Since there are multiple scheduling strategies, the selection of scheduling pass is left in the hands of the pass manager designer. Once a scheduling analysis pass is run, `node_start_time` is generated in the `property_set`. This information is represented by a python dictionary of the expected instruction execution times keyed on the node instances. The padding pass expects all `DAGOpNode` in the circuit to be scheduled. + + This base class doesn’t define any sequence to interleave, but it manages the location where the sequence is inserted, and provides a set of information necessary to construct the proper sequence. Thus, a subclass of this pass just needs to implement `_pad()` method, in which the subclass constructs a circuit block to insert. This mechanism removes lots of boilerplate logic to manage whole DAG circuits. + + Note that padding pass subclasses should define interleaving sequences satisfying: + + > * Interleaved sequence does not change start time of other nodes + > * Interleaved sequence should have total duration of the provided `time_interval`. + + Any manipulation violating these constraints may prevent this base pass from correctly tracking the start time of each instruction, which may result in violation of hardware alignment constraints. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + + ## Methods + + ### \_\_call\_\_ + + + Runs the pass on circuit. + + **Parameters** + + * **circuit** (*QuantumCircuit*) – The dag on which the pass is run. + * **property\_set** (*PropertySet | dict | None*) – Input/output property set. An analysis pass might change the property set in-place. + + **Return type** + + QuantumCircuit + + **Returns** + + If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. + + + ### execute + + + Execute optimization task for input Qiskit IR. + + **Parameters** + + * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – State associated with workflow execution by the pass manager itself. + * **callback** (`Optional`\[`Callable`]) – A callback function which is caller per execution of optimization task. + + **Return type** + + `tuple`\[`Any`, [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")] + + **Returns** + + Optimized Qiskit IR and state of the workflow. + + + ### name + + + Name of the pass. + + **Return type** + + `str` + + + ### run + + + Run the padding pass on `dag`. + + **Parameters** + + **dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)")) – DAG to be checked. + + **Returns** + + DAG with idle time filled with instructions. + + **Return type** + + DAGCircuit + + **Raises** + + **TranspilerError** – When a particular node is not scheduled, likely some transform pass is inserted before this node is called. + + + ### update\_status + + + Update workflow status. + + **Parameters** + + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – Pass manager state to update. + * **run\_state** (`RunState`) – Completion status of current task. + + **Return type** + + [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)") + + **Returns** + + Updated pass manager state. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx new file mode 100644 index 00000000000..d62ba538038 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx @@ -0,0 +1,128 @@ +--- +title: DynamicCircuitInstructionDurations +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations +--- + +# DynamicCircuitInstructionDurations + + + For dynamic circuits the IBM Qiskit backend currently reports instruction durations that differ compared with those required for the legacy Qobj-based path. For now we use this class to report updated InstructionDurations. TODO: This would be mitigated by a specialized Backend/Target for dynamic circuit backends. + + Dynamic circuit instruction durations. + + ## Attributes + + ### MEASURE\_PATCH\_CYCLES + + + + ### MEASURE\_PATCH\_ODD\_OFFSET + + + + ## Methods + + ### from\_backend + + + Construct a `DynamicInstructionDurations` object from the backend. + + **Parameters** + + **backend** ([`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v1.0)")) – backend from which durations (gate lengths) and dt are extracted. + + **Returns** + + The InstructionDurations constructed from backend. + + **Return type** + + DynamicInstructionDurations + + + ### from\_target + + + Construct a `DynamicInstructionDurations` object from the target. + + **Parameters** + + **target** ([`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)")) – target from which durations (gate lengths) and dt are extracted. + + **Returns** + + The InstructionDurations constructed from backend. + + **Return type** + + DynamicInstructionDurations + + + ### get + + + Get the duration of the instruction with the name, qubits, and parameters. + + Some instructions may have a parameter dependent duration. + + **Parameters** + + * **inst** (*str |* [*qiskit.circuit.Instruction*](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v1.0)")) – An instruction or its name to be queried. + * **qubits** (*int | list\[int]*) – Qubit indices that the instruction acts on. + * **unit** (*str*) – The unit of duration to be returned. It must be ‘s’ or ‘dt’. + * **parameters** (*list\[float] | None*) – The value of the parameters of the desired instruction. + + **Returns** + + The duration of the instruction on the qubits. + + **Return type** + + float|int + + **Raises** + + **TranspilerError** – No duration is defined for the instruction. + + + ### units\_used + + + Get the set of all units used in this instruction durations. + + **Return type** + + `set`\[`str`] + + **Returns** + + Set of units used in this instruction durations. + + + ### update + + + Update self with inst\_durations (inst\_durations overwrite self). Overrides the default durations for certain hardcoded instructions. + + **Parameters** + + * **inst\_durations** (`Union`\[`List`\[`Tuple`\[`str`, `Optional`\[`Iterable`\[`int`]], `float`, `Optional`\[`Iterable`\[`float`]], `str`]], `List`\[`Tuple`\[`str`, `Optional`\[`Iterable`\[`int`]], `float`, `Optional`\[`Iterable`\[`float`]]]], `List`\[`Tuple`\[`str`, `Optional`\[`Iterable`\[`int`]], `float`, `str`]], `List`\[`Tuple`\[`str`, `Optional`\[`Iterable`\[`int`]], `float`]], [`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v1.0)"), `None`]) – Instruction durations to be merged into self (overwriting self). + * **dt** (`Optional`\[`float`]) – Sampling duration in seconds of the target backend. + + **Returns** + + The updated InstructionDurations. + + **Return type** + + InstructionDurations + + **Raises** + + **TranspilerError** – If the format of instruction\_durations is invalid. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx new file mode 100644 index 00000000000..4b18d79b217 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx @@ -0,0 +1,147 @@ +--- +title: PadDelay +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay +--- + +# PadDelay + + + Padding idle time with Delay instructions. + + Consecutive delays will be merged in the output of this pass. + + The ASAP-scheduled circuit output may become + + ```python + ┌────────────────┐ + q_0: ┤ Delay(160[dt]) ├──■── + └─────┬───┬──────┘┌─┴─┐ + q_1: ──────┤ X ├───────┤ X ├ + └───┘ └───┘ + ``` + + Note that the additional idle time of 60dt on the `q_0` wire coming from the duration difference between `Delay` of 100dt (`q_0`) and `XGate` of 160 dt (`q_1`) is absorbed in the delay instruction on the `q_0` wire, i.e. in total 160 dt. + + See [`BlockBasePadder`](qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder "qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder") pass for details. + + Create new padding delay pass. + + **Parameters** + + * **fill\_very\_end** (`bool`) – Set `True` to fill the end of circuit with delay. + * **schedule\_idle\_qubits** (`bool`) – Set to true if you’d like a delay inserted on idle qubits. This is useful for timeline visualizations, but may cause issues for execution on large backends. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + + ## Methods + + ### \_\_call\_\_ + + + Runs the pass on circuit. + + **Parameters** + + * **circuit** (*QuantumCircuit*) – The dag on which the pass is run. + * **property\_set** (*PropertySet | dict | None*) – Input/output property set. An analysis pass might change the property set in-place. + + **Return type** + + QuantumCircuit + + **Returns** + + If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. + + + ### execute + + + Execute optimization task for input Qiskit IR. + + **Parameters** + + * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – State associated with workflow execution by the pass manager itself. + * **callback** (`Optional`\[`Callable`]) – A callback function which is caller per execution of optimization task. + + **Return type** + + `tuple`\[`Any`, [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")] + + **Returns** + + Optimized Qiskit IR and state of the workflow. + + + ### name + + + Name of the pass. + + **Return type** + + `str` + + + ### run + + + Run the padding pass on `dag`. + + **Parameters** + + **dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)")) – DAG to be checked. + + **Returns** + + DAG with idle time filled with instructions. + + **Return type** + + DAGCircuit + + **Raises** + + **TranspilerError** – When a particular node is not scheduled, likely some transform pass is inserted before this node is called. + + + ### update\_status + + + Update workflow status. + + **Parameters** + + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – Pass manager state to update. + * **run\_state** (`RunState`) – Completion status of current task. + + **Return type** + + [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)") + + **Returns** + + Updated pass manager state. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx new file mode 100644 index 00000000000..34cbffd5169 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx @@ -0,0 +1,282 @@ +--- +title: PadDynamicalDecoupling +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling +in_page_toc_min_heading_level: 1 +python_api_type: class +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling +--- + +# PadDynamicalDecoupling + + + Dynamical decoupling insertion pass for IBM dynamic circuit backends. + + This pass works on a scheduled, physical circuit. It scans the circuit for idle periods of time (i.e. those containing delay instructions) and inserts a DD sequence of gates in those spots. These gates amount to the identity, so do not alter the logical action of the circuit, but have the effect of mitigating decoherence in those idle periods. As a special case, the pass allows a length-1 sequence (e.g. \[XGate()]). In this case the DD insertion happens only when the gate inverse can be absorbed into a neighboring gate in the circuit (so we would still be replacing Delay with something that is equivalent to the identity). This can be used, for instance, as a Hahn echo. This pass ensures that the inserted sequence preserves the circuit exactly (including global phase). + + ```python + import numpy as np + from qiskit.circuit import QuantumCircuit + from qiskit.circuit.library import XGate + from qiskit.transpiler import PassManager, InstructionDurations + from qiskit.visualization import timeline_drawer + + from qiskit_ibm_provider.transpiler.passes.scheduling import ALAPScheduleAnalysis + from qiskit_ibm_provider.transpiler.passes.scheduling import PadDynamicalDecoupling + + circ = QuantumCircuit(4) + circ.h(0) + circ.cx(0, 1) + circ.cx(1, 2) + circ.cx(2, 3) + circ.measure_all() + durations = InstructionDurations( + [("h", 0, 50), ("cx", [0, 1], 700), ("reset", None, 10), + ("cx", [1, 2], 200), ("cx", [2, 3], 300), + ("x", None, 50), ("measure", None, 1000)] + ) + ``` + + ```python + # balanced X-X sequence on all qubits + dd_sequence = [XGate(), XGate()] + pm = PassManager([ALAPScheduleAnalysis(durations), + PadDynamicalDecoupling(durations, dd_sequence)]) + circ_dd = pm.run(circ) + circ_dd.draw() + ``` + + ```python + ┌───┐ ┌───────────────┐ ┌───┐ » + q_0: ──────┤ H ├─────────■──┤ Delay(96[dt]) ├──────┤ X ├──────» + ┌─────┴───┴─────┐ ┌─┴─┐└───────────────┘┌─────┴───┴─────┐» + q_1: ┤ Delay(50[dt]) ├─┤ X ├────────■────────┤ Delay(48[dt]) ├» + ├───────────────┴┐└───┘ ┌─┴─┐ └───────────────┘» + q_2: ┤ Delay(750[dt]) ├───────────┤ X ├──────────────■────────» + ├────────────────┤ └───┘ ┌─┴─┐ » + q_3: ┤ Delay(950[dt]) ├────────────────────────────┤ X ├──────» + └────────────────┘ └───┘ » + meas: 4/═════════════════════════════════════════════════════════» + » + « ┌────────────────┐ ┌───┐ ┌───────────────┐ » + « q_0: ┤ Delay(208[dt]) ├──────┤ X ├──────┤ Delay(96[dt]) ├─────────────────» + « └─────┬───┬──────┘┌─────┴───┴─────┐└─────┬───┬─────┘┌───────────────┐» + « q_1: ──────┤ X ├───────┤ Delay(96[dt]) ├──────┤ X ├──────┤ Delay(56[dt]) ├» + « └───┘ └───────────────┘ └───┘ └───────────────┘» + « q_2: ─────────────────────────────────────────────────────────────────────» + « » + « q_3: ─────────────────────────────────────────────────────────────────────» + « » + «meas: 4/═════════════════════════════════════════════════════════════════════» + « » + « ░ ┌─┐ + « q_0: ─░─┤M├───────── + « ░ └╥┘┌─┐ + « q_1: ─░──╫─┤M├────── + « ░ ║ └╥┘┌─┐ + « q_2: ─░──╫──╫─┤M├─── + « ░ ║ ║ └╥┘┌─┐ + « q_3: ─░──╫──╫──╫─┤M├ + « ░ ║ ║ ║ └╥┘ + «meas: 4/════╩══╩══╩══╩═ + « 0 1 2 3 + ``` + + ```python + # Uhrig sequence on qubit 0 + n = 8 + dd_sequence = [XGate()] * n + def uhrig_pulse_location(k): + return np.sin(np.pi * (k + 1) / (2 * n + 2)) ** 2 + spacings = [] + for k in range(n): + spacings.append(uhrig_pulse_location(k) - sum(spacings)) + spacings.append(1 - sum(spacings)) + pm = PassManager( + [ + ALAPScheduleAnalysis(durations), + PadDynamicalDecoupling(durations, dd_sequence, qubits=[0], spacings=spacings), + ] + ) + circ_dd = pm.run(circ) + circ_dd.draw() + ``` + + ```python + ┌───┐ ┌────────────────┐ ░ ┌─┐ » + q_0: ──────┤ H ├─────────■──┤ Delay(500[dt]) ├───────────────────░─┤M├──────» + ┌─────┴───┴─────┐ ┌─┴─┐└────────────────┘┌────────────────┐ ░ └╥┘┌─┐ » + q_1: ┤ Delay(50[dt]) ├─┤ X ├────────■─────────┤ Delay(300[dt]) ├─░──╫─┤M├───» + ├───────────────┴┐└───┘ ┌─┴─┐ └────────────────┘ ░ ║ └╥┘┌─┐» + q_2: ┤ Delay(750[dt]) ├───────────┤ X ├───────────────■──────────░──╫──╫─┤M├» + ├────────────────┤ └───┘ ┌─┴─┐ ░ ║ ║ └╥┘» + q_3: ┤ Delay(950[dt]) ├─────────────────────────────┤ X ├────────░──╫──╫──╫─» + └────────────────┘ └───┘ ░ ║ ║ ║ » + meas: 4/═══════════════════════════════════════════════════════════════╩══╩══╩═» + 0 1 2 » + « + « q_0: ─── + « + « q_1: ─── + « + « q_2: ─── + « ┌─┐ + « q_3: ┤M├ + « └╥┘ + «meas: 4/═╩═ + « 3 + ``` + + + You need to call [`ALAPScheduleAnalysis`](qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis "qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis") before running dynamical decoupling to guarantee your circuit satisfies acquisition alignment constraints for dynamic circuit backends. + + + Dynamical decoupling initializer. + + **Parameters** + + * **durations** ([`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v1.0)")) – Durations of instructions to be used in scheduling. + + * **dd\_sequences** (`Union`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v1.0)")], `List`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v1.0)")]]]) – Sequence of gates to apply in idle spots. Alternatively a list of gate sequences may be supplied that will preferentially be inserted if there is a delay of sufficient duration. This may be tuned by the optionally supplied `sequence_min_length_ratios`. + + * **qubits** (`Optional`\[`List`\[`int`]]) – Physical qubits on which to apply DD. If None, all qubits will undergo DD (when possible). + + * **spacings** (`Union`\[`List`\[`List`\[`float`]], `List`\[`float`], `None`]) – A list of lists of spacings between the DD gates. The available slack will be divided according to this. The list length must be one more than the length of dd\_sequence, and the elements must sum to 1. If None, a balanced spacing will be used \[d/2, d, d, …, d, d, d/2]. This spacing only applies to the first subcircuit, if a `coupling_map` is specified + + * **skip\_reset\_qubits** (`bool`) – If True, does not insert DD on idle periods that immediately follow initialized/reset qubits (as qubits in the ground state are less susceptible to decoherence). + + * **pulse\_alignment** (`int`) – The hardware constraints for gate timing allocation. This is usually provided from `backend.configuration().timing_constraints`. If provided, the delay length, i.e. `spacing`, is implicitly adjusted to satisfy this constraint. + + * **extra\_slack\_distribution** (`str`) – + + The option to control the behavior of DD sequence generation. The duration of the DD sequence should be identical to an idle time in the scheduled quantum circuit, however, the delay in between gates comprising the sequence should be integer number in units of dt, and it might be further truncated when `pulse_alignment` is specified. This sometimes results in the duration of the created sequence being shorter than the idle time that you want to fill with the sequence, i.e. extra slack. This option takes following values. + + > * ”middle”: Put the extra slack to the interval at the middle of the sequence. + > * ”edges”: Divide the extra slack as evenly as possible into intervals at beginning and end of the sequence. + + * **sequence\_min\_length\_ratios** (`Union`\[`int`, `List`\[`int`], `None`]) – List of minimum delay length to DD sequence ratio to satisfy in order to insert the DD sequence. For example if the X-X dynamical decoupling sequence is 320dt samples long and the available delay is 384dt it has a ratio of 384dt/320dt=1.2. From the perspective of dynamical decoupling this is likely to add more control noise than decoupling error rate reductions. The defaults value is 2.0. + + * **insert\_multiple\_cycles** (`bool`) – If the available duration exceeds 2\*sequence\_min\_length\_ratio\*duration(dd\_sequence) enable the insertion of multiple rounds of the dynamical decoupling sequence in that delay. + + * **coupling\_map** (`Optional`\[[`CouplingMap`](/api/qiskit/qiskit.transpiler.CouplingMap "(in Qiskit v1.0)")]) – directed graph representing the coupling map for the device. Specifying a coupling map partitions the device into subcircuits, in order to apply DD sequences with different pulse spacings within each. Currently support 2 subcircuits. + + * **alt\_spacings** (`Union`\[`List`\[`List`\[`float`]], `List`\[`float`], `None`]) – A list of lists of spacings between the DD gates, for the second subcircuit, as determined by the coupling map. If None, a balanced spacing that is staggered with respect to the first subcircuit will be used \[d, d, d, …, d, d, 0]. + + * **schedule\_idle\_qubits** (`bool`) – Set to true if you’d like a delay inserted on idle qubits. This is useful for timeline visualizations, but may cause issues for execution on large backends. + + **Raises** + + * **TranspilerError** – When invalid DD sequence is specified. + * **TranspilerError** – When pulse gate with the duration which is non-multiple of the alignment constraint value is found. + * **TranspilerError** – When the coupling map is not supported (i.e., if degree > 3) + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + + ## Methods + + ### \_\_call\_\_ + + + Runs the pass on circuit. + + **Parameters** + + * **circuit** (*QuantumCircuit*) – The dag on which the pass is run. + * **property\_set** (*PropertySet | dict | None*) – Input/output property set. An analysis pass might change the property set in-place. + + **Return type** + + QuantumCircuit + + **Returns** + + If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. + + + ### execute + + + Execute optimization task for input Qiskit IR. + + **Parameters** + + * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – State associated with workflow execution by the pass manager itself. + * **callback** (`Optional`\[`Callable`]) – A callback function which is caller per execution of optimization task. + + **Return type** + + `tuple`\[`Any`, [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")] + + **Returns** + + Optimized Qiskit IR and state of the workflow. + + + ### name + + + Name of the pass. + + **Return type** + + `str` + + + ### run + + + Run the padding pass on `dag`. + + **Parameters** + + **dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)")) – DAG to be checked. + + **Returns** + + DAG with idle time filled with instructions. + + **Return type** + + DAGCircuit + + **Raises** + + **TranspilerError** – When a particular node is not scheduled, likely some transform pass is inserted before this node is called. + + + ### update\_status + + + Update workflow status. + + **Parameters** + + * **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)")) – Pass manager state to update. + * **run\_state** (`RunState`) – Completion status of current task. + + **Return type** + + [`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.0)") + + **Returns** + + Updated pass manager state. + + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.mdx new file mode 100644 index 00000000000..1d736992b01 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling.mdx @@ -0,0 +1,384 @@ +--- +title: scheduling +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling +in_page_toc_min_heading_level: 2 +python_api_type: module +python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling +--- + + + +# scheduling + + + +## Scheduling + + + +`qiskit_ibm_provider.transpiler.passes.scheduling` + +A collection of scheduling passes for working with IBM Quantum’s next-generation backends that support advanced “dynamic circuit” capabilities. Ie., circuits with support for classical control-flow/feedback based off of measurement results. + + + You should not mix these scheduling passes with Qiskit’s builtin scheduling passes as they will negatively interact with the scheduling routines for dynamic circuits. This includes setting `scheduling_method` in [`transpile()`](/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v1.0)") or [`generate_preset_pass_manager()`](/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v1.0)"). + + +Below we demonstrate how to schedule and pad a teleportation circuit with delays for a dynamic circuit backend’s execution model: + +```python +from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister +from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager +from qiskit.transpiler.passmanager import PassManager + +from qiskit_ibm_provider.transpiler.passes.scheduling import DynamicCircuitInstructionDurations +from qiskit_ibm_provider.transpiler.passes.scheduling import ALAPScheduleAnalysis +from qiskit_ibm_provider.transpiler.passes.scheduling import PadDelay +try: + from qiskit.providers.fake_provider import Fake7QPulseV1 +except ImportError: + from qiskit.providers.fake_provider import FakeJakarta as Fake7QPulseV1 + + +backend = Fake7QPulseV1() + +# Temporary workaround for mock backends. For real backends this is not required. +backend.configuration().basis_gates.append("if_else") + + +# Use this duration class to get appropriate durations for dynamic +# circuit backend scheduling +durations = DynamicCircuitInstructionDurations.from_backend(backend) +# Generate the main Qiskit transpile passes. +pm = generate_preset_pass_manager(optimization_level=1, backend=backend) +# Configure the as-late-as-possible scheduling pass +pm.scheduling = PassManager([ALAPScheduleAnalysis(durations), PadDelay()]) + +qr = QuantumRegister(3) +crz = ClassicalRegister(1, name="crz") +crx = ClassicalRegister(1, name="crx") +result = ClassicalRegister(1, name="result") + +teleport = QuantumCircuit(qr, crz, crx, result, name="Teleport") + +teleport.h(qr[1]) +teleport.cx(qr[1], qr[2]) +teleport.cx(qr[0], qr[1]) +teleport.h(qr[0]) +teleport.measure(qr[0], crz) +teleport.measure(qr[1], crx) +with teleport.if_test((crz, 1)): + teleport.z(qr[2]) +with teleport.if_test((crx, 1)): + teleport.x(qr[2]) +teleport.measure(qr[2], result) + +# Transpile. +scheduled_teleport = pm.run(teleport) + +scheduled_teleport.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_1\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png) + +Instead of padding with delays we may also insert a dynamical decoupling sequence using the [`PadDynamicalDecoupling`](qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling "qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling") pass as shown below: + +```python +from qiskit.circuit.library import XGate + +from qiskit_ibm_provider.transpiler.passes.scheduling import PadDynamicalDecoupling + + +dd_sequence = [XGate(), XGate()] + +pm = generate_preset_pass_manager(optimization_level=1, backend=backend) +pm.scheduling = PassManager( + [ + ALAPScheduleAnalysis(durations), + PadDynamicalDecoupling(durations, dd_sequence), + ] +) + +dd_teleport = pm.run(teleport) + +dd_teleport.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_2\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png) + +When compiling a circuit with Qiskit, it is more efficient and more robust to perform all the transformations in a single transpilation. This has been done above by extending Qiskit’s preset pass managers. For example, Qiskit’s [`transpile()`](/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v1.0)") function internally builds its pass set by using [`generate_preset_pass_manager()`](/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v1.0)"). This returns instances of [`StagedPassManager`](/api/qiskit/qiskit.transpiler.StagedPassManager "(in Qiskit v1.0)"), which can be extended. + + + +### Scheduling old format `c_if` conditioned gates + +Scheduling with old format `c_if` conditioned gates is not supported. + +```python +qc_c_if = QuantumCircuit(1, 1) +qc_c_if.x(0).c_if(0, 1) +qc_c_if.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_3\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png) + +The [`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.IBMBackend") configures a translation plugin `IBMTranslationPlugin` to automatically apply transformations and optimizations for IBM hardware backends when invoking [`transpile()`](/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v1.0)"). This will automatically convert all old style `c_if` conditioned gates to new-style control-flow. We may then schedule the transpiled circuit without further modification. + +```python +# Temporary workaround for mock backends. For real backends this is not required. +backend.get_translation_stage_plugin = lambda: "ibm_dynamic_circuits" + +pm = generate_preset_pass_manager(optimization_level=1, backend=backend) +pm.scheduling = PassManager( + [ + ALAPScheduleAnalysis(durations), + PadDynamicalDecoupling(durations, dd_sequence), + ] +) + +qc_if_dd = pm.run(qc_c_if, backend) +qc_if_dd.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_4\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png) + +If you are not using the transpiler plugin stages to work around this please manually run the pass [`qiskit.transpiler.passes.ConvertConditionsToIfOps`](/api/qiskit/qiskit.transpiler.passes.ConvertConditionsToIfOps "(in Qiskit v1.0)") prior to your scheduling pass. + +```python +from qiskit.transpiler.passes import ConvertConditionsToIfOps + +pm = generate_preset_pass_manager(optimization_level=1, backend=backend) +pm.scheduling = PassManager( + [ + ConvertConditionsToIfOps(), + ALAPScheduleAnalysis(durations), + PadDelay(), + ] +) + +qc_if_dd = pm.run(qc_c_if) +qc_if_dd.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_5\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png) + + + +### Exploiting IBM backend’s local parallel “fast-path” + +IBM quantum hardware supports a localized “fast-path” which enables a block of gates applied to a *single qubit* that are conditional on an immediately predecessor measurement *of the same qubit* to be completed with lower latency. The hardware is also able to do this in *parallel* on disjoint qubits that satisfy this condition. + +For example, the conditional gates below are performed in parallel with lower latency as the measurements flow directly into the conditional blocks which in turn only apply gates to the same measurement qubit. + +```python +qc = QuantumCircuit(2, 2) +qc.measure(0, 0) +qc.measure(1, 1) +# Conditional blocks will be performed in parallel in the hardware +with qc.if_test((0, 1)): + qc.x(0) +with qc.if_test((1, 1)): + qc.x(1) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_6\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png) + +The circuit below will not use the fast-path as the conditional gate is on a different qubit than the measurement qubit. + +```python +qc = QuantumCircuit(2, 2) +qc.measure(0, 0) +with qc.if_test((0, 1)): + qc.x(1) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_7\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png) + +Similarly, the circuit below contains gates on multiple qubits and will not be performed using the fast-path. + +```python +qc = QuantumCircuit(2, 2) +qc.measure(0, 0) +with qc.if_test((0, 1)): + qc.x(0) + qc.x(1) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_8\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png) + +A fast-path block may contain multiple gates as long as they are on the fast-path qubit. If there are multiple fast-path blocks being performed in parallel each block will be padded out to the duration of the longest block. + +```python +qc = QuantumCircuit(2, 2) +qc.measure(0, 0) +qc.measure(1, 1) +# Conditional blocks will be performed in parallel in the hardware +with qc.if_test((0, 1)): + qc.x(0) + # Will be padded out to a duration of 1600 on the backend. +with qc.if_test((1, 1)): + qc.delay(1600, 1) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_9\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png) + +This behavior is also applied to the else condition of a fast-path eligible branch. + +```python +qc = QuantumCircuit(1, 1) +qc.measure(0, 0) +# Conditional blocks will be performed in parallel in the hardware +with qc.if_test((0, 1)) as else_: + qc.x(0) + # Will be padded out to a duration of 1600 on the backend. +with else_: + qc.delay(1600, 0) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_10\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_10_0.png) + +If a single measurement result is used with several conditional blocks, if there is a fast-path eligible block it will be applied followed by the non-fast-path blocks which will execute with the standard higher latency conditional branch. + +```python +qc = QuantumCircuit(2, 2) +qc.measure(0, 0) +# Conditional blocks will be performed in parallel in the hardware +with qc.if_test((0, 1)): + # Uses fast-path + qc.x(0) +with qc.if_test((0, 1)): + # Does not use fast-path + qc.x(1) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_11\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png) + +If you wish to prevent the usage of the fast-path you may insert a barrier between the measurement and the conditional branch. + +```python +qc = QuantumCircuit(1, 2) +qc.measure(0, 0) +# Barrier prevents the fast-path. +qc.barrier() +with qc.if_test((0, 1)): + qc.x(0) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_12\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png) + +Conditional measurements are not eligible for the fast-path. + +```python +qc = QuantumCircuit(1, 2) +qc.measure(0, 0) +with qc.if_test((0, 1)): + # Does not use the fast-path + qc.measure(0, 1) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_13\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png) + +Similarly nested control-flow is not eligible. + +```python +qc = QuantumCircuit(1, 1) +qc.measure(0, 0) +with qc.if_test((0, 1)): + # Does not use the fast-path + qc.x(0) + with qc.if_test((0, 1)): + qc.x(0) + +qc.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_14\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png) + +The scheduler is aware of the fast-path behavior and will not insert delays on idle qubits in blocks that satisfy the fast-path conditions so as to avoid preventing the backend compiler from performing the necessary optimizations to utilize the fast-path. If there are fast-path blocks that will be performed in parallel they currently *will not* be padded out by the scheduler to ensure they are of the same duration in Qiskit + +```python +dd_sequence = [XGate(), XGate()] + +pm = PassManager( + [ + ALAPScheduleAnalysis(durations), + PadDynamicalDecoupling(durations, dd_sequence), + ] +) + +qc = QuantumCircuit(2, 2) +qc.measure(0, 0) +qc.measure(1, 1) +with qc.if_test((0, 1)): + qc.x(0) + # Is currently not padded to ensure + # a duration of 1000. If you desire + # this you would need to manually add + # qc.delay(840, 0) +with qc.if_test((1, 1)): + qc.delay(1000, 0) + + +qc.draw(output="mpl", style="iqp") + +qc_dd = pm.run(qc) + +qc_dd.draw(output="mpl", style="iqp") +``` + +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_15\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png) + + + If there are qubits that are *not* involved in a fast-path decision it is not currently possible to use them in a fast-path branch in parallel with the fast-path qubits resulting from a measurement. This will be revised in the future as we further improve these capabilities. + + For example: + + ```python + qc = QuantumCircuit(3, 2) + qc.x(1) + qc.measure(0, 0) + with qc.if_test((0, 1)): + qc.x(0) + # Qubit 1 sits idle throughout the fast-path decision + with qc.if_test((1, 0)): + # Qubit 2 is idle but there is no measurement + # to make it fast-path eligible. This will + # however avoid a communication event in the hardware + # since the condition is compile time evaluated. + qc.x(2) + + qc.draw(output="mpl", style="iqp") + ``` + + ![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_16\_0.png](/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_16_0.png) + + + + +#### Scheduling & Dynamical Decoupling + +| | | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [`BlockBasePadder`](qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder "qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder")(\[schedule\_idle\_qubits]) | The base class of padding pass. | +| [`ALAPScheduleAnalysis`](qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis "qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis")(durations) | Dynamic circuits as-late-as-possible (ALAP) scheduling analysis pass. | +| [`ASAPScheduleAnalysis`](qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis "qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis")(durations) | Dynamic circuits as-soon-as-possible (ASAP) scheduling analysis pass. | +| [`DynamicCircuitInstructionDurations`](qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations "qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations")(\[...]) | For dynamic circuits the IBM Qiskit backend currently reports instruction durations that differ compared with those required for the legacy Qobj-based path. | +| [`PadDelay`](qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay "qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay")(\[fill\_very\_end, schedule\_idle\_qubits]) | Padding idle time with Delay instructions. | +| [`PadDynamicalDecoupling`](qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling "qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling")(durations, dd\_sequences) | Dynamical decoupling insertion pass for IBM dynamic circuit backends. | + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.seconds_to_duration.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.seconds_to_duration.mdx new file mode 100644 index 00000000000..59993069f8e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.seconds_to_duration.mdx @@ -0,0 +1,28 @@ +--- +title: seconds_to_duration +description: API reference for qiskit_ibm_provider.utils.seconds_to_duration +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.utils.seconds_to_duration +--- + + + +# seconds\_to\_duration + + + Converts seconds in a datetime delta to a duration. + + **Parameters** + + **seconds** (`float`) – Number of seconds in time delta. + + **Return type** + + `Tuple`\[`int`, `int`, `int`, `int`, `int`] + + **Returns** + + A tuple containing the duration in terms of days, hours, minutes, seconds, and milliseconds. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.to_python_identifier.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.to_python_identifier.mdx new file mode 100644 index 00000000000..86f85ff371a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.to_python_identifier.mdx @@ -0,0 +1,28 @@ +--- +title: to_python_identifier +description: API reference for qiskit_ibm_provider.utils.to_python_identifier +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.utils.to_python_identifier +--- + + + +# to\_python\_identifier + + + Convert a name to a valid Python identifier. + + **Parameters** + + **name** (`str`) – Name to be converted. + + **Return type** + + `str` + + **Returns** + + Name that is a valid Python identifier. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.utc_to_local.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.utc_to_local.mdx new file mode 100644 index 00000000000..2d1cb35acfe --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.utc_to_local.mdx @@ -0,0 +1,32 @@ +--- +title: utc_to_local +description: API reference for qiskit_ibm_provider.utils.utc_to_local +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.utils.utc_to_local +--- + + + +# utc\_to\_local + + + Convert a UTC `datetime` object or string to a local timezone `datetime`. + + **Parameters** + + **utc\_dt** (`Union`\[`datetime`, `str`]) – Input UTC datetime or string. + + **Return type** + + `datetime` + + **Returns** + + A `datetime` with the local timezone. + + **Raises** + + **TypeError** – If the input parameter value is not valid. + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.validate_job_tags.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.validate_job_tags.mdx new file mode 100644 index 00000000000..a3614b487c2 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.utils.validate_job_tags.mdx @@ -0,0 +1,29 @@ +--- +title: validate_job_tags +description: API reference for qiskit_ibm_provider.utils.validate_job_tags +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.utils.validate_job_tags +--- + + + +# validate\_job\_tags + + + Validates input job tags. + + **Parameters** + + * **job\_tags** (`Optional`\[`List`\[`str`]]) – Job tags to be validated. + * **exception** (`Type`\[`Exception`]) – Exception to raise if the tags are invalid. + + **Raises** + + **Exception** – If the job tags are invalid. + + **Return type** + + `None` + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_error_map.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_error_map.mdx new file mode 100644 index 00000000000..f9f93b50bc1 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_error_map.mdx @@ -0,0 +1,52 @@ +--- +title: iplot_error_map +description: API reference for qiskit_ibm_provider.visualization.iplot_error_map +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.visualization.iplot_error_map +--- + + + +# iplot\_error\_map + + + Plot the error map of a device. + + **Parameters** + + * **backend** ([`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")) – Plot the error map for this backend. + * **figsize** (`Tuple`\[`int`]) – Figure size in pixels. + * **show\_title** (`bool`) – Whether to show figure title. + * **remove\_badcal\_edges** (`bool`) – Whether to remove bad CX gate calibration data. + * **background\_color** (`str`) – Background color, either ‘white’ or ‘black’. + * **as\_widget** (`bool`) – `True` if the figure is to be returned as a `PlotlyWidget`. Otherwise the figure is to be returned as a `PlotlyFigure`. + + **Return type** + + `Union`\[`PlotlyFigure`, `PlotlyWidget`] + + **Returns** + + The error map figure. + + **Raises** + + * **VisualizationValueError** – If an invalid input is received. + * **VisualizationTypeError** – If the specified backend is a simulator. + + **Example** + + ```python + from qiskit_ibm_provider import IBMProvider + from qiskit_ibm_provider.visualization import iplot_error_map + + provider = IBMProvider(group='open', project='main') + # Note that this is a mock provider, replace ``FakeOpenPulse2Q`` + # with any of the currently available IBM devices. + backend = provider.get_backend('FakeOpenPulse2Q') + + iplot_error_map(backend, as_widget=True) + ``` + + diff --git a/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_gate_map.mdx b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_gate_map.mdx new file mode 100644 index 00000000000..0f405549260 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.visualization.iplot_gate_map.mdx @@ -0,0 +1,53 @@ +--- +title: iplot_gate_map +description: API reference for qiskit_ibm_provider.visualization.iplot_gate_map +in_page_toc_min_heading_level: 1 +python_api_type: function +python_api_name: qiskit_ibm_provider.visualization.iplot_gate_map +--- + + + +# iplot\_gate\_map + + + Plots an interactive gate map of a device. + + **Parameters** + + * **backend** ([`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.ibm_backend.IBMBackend")) – Plot the gate map for this backend. + * **figsize** (`Tuple`\[`Optional`\[`int`], `Optional`\[`int`]]) – Output figure size (wxh) in inches. + * **label\_qubits** (`bool`) – Labels for the qubits. + * **qubit\_size** (`Optional`\[`float`]) – Size of qubit marker. + * **line\_width** (`Optional`\[`float`]) – Width of lines. + * **font\_size** (`Optional`\[`int`]) – Font size of qubit labels. + * **qubit\_color** (`Union`\[`List`\[`str`], `str`]) – A list of colors for the qubits. If a single color is given, it’s used for all qubits. + * **qubit\_labels** (`Optional`\[`List`\[`str`]]) – A list of qubit labels + * **line\_color** (`Union`\[`List`\[`str`], `str`]) – A list of colors for each line from the coupling map. If a single color is given, it’s used for all lines. + * **font\_color** (`str`) – The font color for the qubit labels. + * **background\_color** (`str`) – The background color, either ‘white’ or ‘black’. + * **as\_widget** (`bool`) – `True` if the figure is to be returned as a `PlotlyWidget`. Otherwise the figure is to be returned as a `PlotlyFigure`. + + **Return type** + + `Union`\[`PlotlyFigure`, `PlotlyWidget`] + + **Returns** + + The gate map figure. + + **Example** + + ```python + from qiskit_ibm_provider import IBMProvider + from qiskit_ibm_provider.visualization import iplot_gate_map + + provider = IBMProvider(group='open', project='main') + # Note that this is a mock provider, replace ``FakeOpenPulse2Q`` + # with any of the currently available IBM devices. + backend = provider.get_backend('FakeOpenPulse2Q') + + iplot_gate_map(backend, as_widget=True) + ``` + + diff --git a/docs/api/qiskit-ibm-provider/_package.json b/docs/api/qiskit-ibm-provider/_package.json index 9c7a52a5269..6124d590a63 100644 --- a/docs/api/qiskit-ibm-provider/_package.json +++ b/docs/api/qiskit-ibm-provider/_package.json @@ -1,4 +1,4 @@ { "name": "qiskit-ibm-provider", - "version": "0.10.0" + "version": "0.11.0" } diff --git a/docs/api/qiskit-ibm-provider/ibm_jupyter.mdx b/docs/api/qiskit-ibm-provider/ibm_jupyter.mdx index 1a4965ba4cc..73b3943629b 100644 --- a/docs/api/qiskit-ibm-provider/ibm_jupyter.mdx +++ b/docs/api/qiskit-ibm-provider/ibm_jupyter.mdx @@ -30,6 +30,11 @@ A Collection of Jupyter magic functions and tools that extend the functionality ## Detailed information on a single backend +```python +from qiskit_ibm_provider.test.ibm_provider_mock import mock_get_backend +mock_get_backend('Fake1Q') +``` + ```python from qiskit_ibm_provider import IBMProvider import qiskit_ibm_provider.jupyter @@ -39,11 +44,11 @@ backend = provider.get_backend('ibmq_vigo') ``` ```python -backend +backend.jobs = lambda *args, **kwargs: [] ``` ```python - +backend ``` ## IBM Quantum dashboard diff --git a/docs/api/qiskit-ibm-provider/ibm_utils.mdx b/docs/api/qiskit-ibm-provider/ibm_utils.mdx index 98295f4919e..e6e7cb9c3ca 100644 --- a/docs/api/qiskit-ibm-provider/ibm_utils.mdx +++ b/docs/api/qiskit-ibm-provider/ibm_utils.mdx @@ -42,7 +42,7 @@ Utility functions related to the IBM Quantum Provider. Message broker for the Publisher / Subscriber mechanism - + Represents a “publisher”. Every component (class) can become a [`Publisher`](#qiskit_ibm_provider.utils.pubsub.Publisher "qiskit_ibm_provider.utils.pubsub.Publisher") and send events by inheriting this class. Functions can call this class like: @@ -53,7 +53,7 @@ Message broker for the Publisher / Subscriber mechanism ### publish - + Triggers an event, and associates some data to it, so if there are any subscribers, their callback will be called synchronously. **Return type** @@ -62,14 +62,14 @@ Message broker for the Publisher / Subscriber mechanism - + Represents a “subscriber”. Every component (class) can become a [`Subscriber`](#qiskit_ibm_provider.utils.pubsub.Subscriber "qiskit_ibm_provider.utils.pubsub.Subscriber") and subscribe to events, that will call callback functions when they are emitted. ### clear - + Unsubscribe everything **Return type** @@ -79,7 +79,7 @@ Message broker for the Publisher / Subscriber mechanism ### subscribe - + Subscribes to an event, associating a callback function to that event, so when the event occurs, the callback will be called. This is a blocking call, so try to keep callbacks as lightweight as possible. @@ -91,7 +91,7 @@ Message broker for the Publisher / Subscriber mechanism ### unsubscribe - + Unsubscribe a pair event-callback, so the callback will not be called anymore when the event occurs. **Return type** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.mdx index 4b30d440e28..41f40e6a939 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend # IBMBackend - + Backend class interfacing with an IBM Quantum device. You can run experiments on a backend using the [`run()`](#qiskit_ibm_provider.IBMBackend.run "qiskit_ibm_provider.IBMBackend.run") method. The [`run()`](#qiskit_ibm_provider.IBMBackend.run "qiskit_ibm_provider.IBMBackend.run") method takes one or more [`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v1.0)") and returns an `IBMJob` instance that represents the submitted job. Each job has a unique job ID, which can later be used to retrieve the job. An example of this flow: @@ -317,7 +317,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### acquire\_channel - + Return the acquisition channel for the given qubit. **Returns** @@ -331,7 +331,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### cancel\_session - + Cancel session. All pending jobs will be cancelled. **Return type** @@ -341,7 +341,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### close\_session - + Close the session so new jobs will no longer be accepted, but existing queued or running jobs will run to completion. The session will be terminated once there are no more pending jobs. **Return type** @@ -351,7 +351,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### configuration - + Return the backend configuration. Backend configuration contains fixed information about the backend, such as its name, number of qubits, basis gates, coupling map, quantum volume, etc. @@ -369,7 +369,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### control\_channel - + Return the secondary drive channel for the given qubit. This is typically utilized for controlling multiqubit interactions. This channel is derived from other channels. @@ -389,7 +389,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### defaults - + Return the pulse defaults for the backend. The schema for default pulse configuration can be found in [Qiskit/ibm-quantum-schemas](https://github.com/Qiskit/ibm-quantum-schemas/blob/main/schemas/default_pulse_configuration_schema.json). @@ -409,7 +409,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### drive\_channel - + Return the drive channel for the given qubit. **Returns** @@ -423,7 +423,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### get\_translation\_stage\_plugin - + Return the default translation stage plugin name for IBM backends. **Return type** @@ -433,7 +433,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### measure\_channel - + Return the measure stimulus channel for the given qubit. **Returns** @@ -447,7 +447,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### open\_session - + Open session **Return type** @@ -457,7 +457,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### properties - + Return the backend properties, subject to optional filtering. This data describes qubits properties (such as T1 and T2), gates properties (such as gate length and error), and other general properties of the backend. @@ -508,7 +508,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### run - + Run on the backend. If a keyword specified here is also present in the `options` attribute/object, the value specified here will be used for this run. **Parameters** @@ -523,9 +523,9 @@ python_api_name: qiskit_ibm_provider.IBMBackend * **init\_num\_resets** (`Optional`\[`int`]) – The number of qubit resets to insert before each circuit execution. - * **or** (*The following parameters are applicable only if dynamic=False is specified*) – + * **or** (*The following parameters are applicable only if dynamic=False is specified*) - * **to.** (*defaulted*) – + * **to.** (*defaulted*) * **header** (`Optional`\[`Dict`]) – User input that will be attached to the job and will be copied to the corresponding result header. Headers do not affect the run. This replaces the old `Qobj` header. @@ -597,7 +597,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### status - + Return the backend status. @@ -619,7 +619,7 @@ python_api_name: qiskit_ibm_provider.IBMBackend ### target\_history - + A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v1.0)") :returns: Target with properties found on datetime diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.mdx index e6d966f626c..78b10d1796d 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendApiError # IBMBackendApiError - + Errors that occur unexpectedly when querying the server. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx index 1852d84849c..69a9a832531 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendApiProtocolError # IBMBackendApiProtocolError - + Errors raised when an unexpected value is received from the server. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.mdx index 1ba2cae9ee5..a504ef96cd4 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendError # IBMBackendError - + Base class for errors raised by the backend modules. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.mdx index d8f11435dc5..0e90b9db0b4 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendService # IBMBackendService - + Backend namespace for an IBM Quantum account. Represent a namespace that provides backend related services for the IBM Quantum backends available to this account. An instance of this class is used as a callable attribute to the [`IBMProvider`](qiskit_ibm_provider.IBMProvider "qiskit_ibm_provider.IBMProvider") class. This allows a convenient way to query for all backends or to access a specific backend: @@ -41,7 +41,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendService ### backends - + Return all backends accessible via this account, subject to optional filtering. **Parameters** @@ -96,7 +96,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendService ### jobs - + Return a list of jobs, subject to optional filtering. Retrieve jobs that match the given filters and paginate the results if desired. Note that the server has a limit for the number of jobs returned in a single call. As a result, this function might involve making several calls to the server. @@ -115,8 +115,8 @@ python_api_name: qiskit_ibm_provider.IBMBackendService * **descending** (`bool`) – If `True`, return the jobs in descending order of the job creation date (i.e. newest first) until the limit is reached. * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. * **legacy** (`bool`) – If `True`, only retrieve jobs run from the archived `qiskit-ibmq-provider`. - * **Otherwise** – - * **qiskit-ibm-provider.** (*only retrieve jobs run from*) – + * **Otherwise** + * **qiskit-ibm-provider.** (*only retrieve jobs run from*) **Return type** @@ -134,7 +134,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendService ### retrieve\_job - + Return a single job. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.mdx index c5584577e74..6e638920ece 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendValueError # IBMBackendValueError - + Value errors raised by the backend modules. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.mdx index 9d68fa9ae35..90311485090 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMError # IBMError - + Base class for errors raised by the provider modules. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.mdx index 8787524a16b..dca17cfda5b 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider # IBMProvider - + Provides access to the IBM Quantum services available to an account. Authenticate against IBM Quantum for use from saved credentials or during session. @@ -130,7 +130,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### active\_account - + Return the IBM Quantum account currently in use for the session. **Return type** @@ -144,7 +144,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### backends - + Return all backends accessible via this account, subject to optional filtering. **Parameters** @@ -190,7 +190,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### delete\_account - + Delete a saved account from disk. **Parameters** @@ -208,7 +208,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### get\_backend - + Return a single backend matching the specified filtering. **Parameters** @@ -233,7 +233,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### instances - + Return the IBM Quantum instances list currently in use for the session. **Return type** @@ -247,7 +247,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### jobs - + Return a list of jobs, subject to optional filtering. Retrieve jobs that match the given filters and paginate the results if desired. Note that the server has a limit for the number of jobs returned in a single call. As a result, this function might involve making several calls to the server. @@ -264,8 +264,8 @@ python_api_name: qiskit_ibm_provider.IBMProvider * **descending** (`bool`) – If `True`, return the jobs in descending order of the job creation date (i.e. newest first) until the limit is reached. * **instance** (`Optional`\[`str`]) – The provider in the hub/group/project format. * **legacy** (`bool`) – If `True`, only retrieve jobs run from the deprecated `qiskit-ibmq-provider`. - * **Otherwise** – - * **qiskit-ibm-provider.** (*only retrieve jobs run from*) – + * **Otherwise** + * **qiskit-ibm-provider.** (*only retrieve jobs run from*) **Return type** @@ -278,7 +278,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### retrieve\_job - + Return a single job. **Parameters** @@ -296,7 +296,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### save\_account - + Save the account to disk for future use. **Parameters** @@ -316,7 +316,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider ### saved\_accounts - + List the accounts saved on disk. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.mdx index 88c672229b4..18b178fccf2 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMProviderError # IBMProviderError - + Base class for errors raise by IBMProvider. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.mdx index 465806a90ce..5fc77201dea 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.IBMProviderValueError # IBMProviderValueError - + Value errors raised by IBMProvider. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.mdx index 9afb796f6fe..9ae77feb02a 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.Session # Session - + Class for creating a flexible Qiskit Runtime session. A Qiskit Runtime `session` allows you to group a collection of iterative calls to the quantum computer. A session is started when the first job within the session is started. Subsequent jobs within the session are prioritized by the scheduler. Data used within a session, such as transpiled circuits, is also cached to avoid unnecessary overhead. @@ -77,7 +77,7 @@ python_api_name: qiskit_ibm_provider.Session ### cancel - + Set the session.\_active status to False **Return type** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.mdx index 54763b88421..7cbb6e82873 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob # IBMCircuitJob - + Representation of a job that executes on an IBM Quantum backend. The job may be executed on a simulator or a real device. A new `IBMCircuitJob` instance is returned when you call `IBMBackend.run()` to submit a job to a particular backend. @@ -116,7 +116,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### backend\_options - + Return the backend configuration options used for this job. Options that are not applicable to the job execution are not returned. Some but not all of the options with default values are returned. You can use [`qiskit_ibm_provider.IBMBackend.options`](qiskit_ibm_provider.IBMBackend#options "qiskit_ibm_provider.IBMBackend.options") to see all backend options. @@ -132,7 +132,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### cancel - + Attempt to cancel the job. @@ -165,7 +165,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### circuits - + Return the circuits for this job. **Return type** @@ -179,7 +179,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### creation\_date - + Return job creation date, in local time. **Return type** @@ -203,7 +203,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### error\_message - + Provide details about the reason of failure. **Return type** @@ -217,7 +217,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### header - + Return the user header specified for this job. **Return type** @@ -241,7 +241,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### job\_id - + Return the job ID assigned by the server. **Return type** @@ -255,7 +255,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### name - + Return the name assigned to this job. **Return type** @@ -269,7 +269,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### properties - + Return the backend properties for this job. **Parameters** @@ -287,7 +287,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### queue\_info - + Return queue information for this job. The queue information may include queue position, estimated start and end time, and dynamic priorities for the hub, group, and project. See [`QueueInfo`](qiskit_ibm_provider.job.QueueInfo "qiskit_ibm_provider.job.QueueInfo") for more information. @@ -307,7 +307,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### queue\_position - + Return the position of the job in the server queue. @@ -329,7 +329,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### refresh - + Obtain the latest job information from the server. This method may add additional attributes to this job instance, if new information becomes available. @@ -345,7 +345,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### result - + Return the result of the job. @@ -401,7 +401,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### scheduling\_mode - + Return the scheduling mode the job is in. **Return type** @@ -415,7 +415,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### status - + Query the server for the latest job status. @@ -441,7 +441,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### submit - + Unsupported method. @@ -459,7 +459,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### tags - + Return the tags assigned to this job. **Return type** @@ -473,7 +473,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### time\_per\_step - + Return the date and time information on each step of the job processing. The output dictionary contains the date and time information on each step of the job processing, in local time. The keys of the dictionary are the names of the steps, and the values are the date and time data, as a datetime object with local timezone info. For example: @@ -495,7 +495,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### update\_name - + Update the name associated with this job. **Parameters** @@ -513,7 +513,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### update\_tags - + Update the tags associated with this job. **Parameters** @@ -536,7 +536,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob ### wait\_for\_final\_state - + **Use the websocket server to wait for the final the state of a job. The server** will remain open if the job is still running and the connection will be terminated once the job completes. Then update and return the status of the job. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.mdx index 2f520b2af14..b2be45d39f7 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob # IBMCompositeJob - + Representation of a set of jobs that execute on an IBM Quantum backend. An `IBMCompositeJob` instance is returned when you call `IBMBackend.run()` to submit a list of circuits whose length exceeds the maximum allowed by the backend or by the `max_circuits_per_job` parameter. @@ -78,7 +78,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### backend\_options - + Return the backend configuration options used for this job. Options that are not applicable to the job execution are not returned. Some but not all of the options with default values are returned. You can use [`qiskit_ibm_provider.IBMBackend.options`](qiskit_ibm_provider.IBMBackend#options "qiskit_ibm_provider.IBMBackend.options") to see all backend options. @@ -94,7 +94,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### block\_for\_submit - + Block until all sub-jobs are submitted. **Return type** @@ -104,7 +104,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### cancel - + Attempt to cancel the job. @@ -136,7 +136,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### circuits - + Return the circuits for this job. **Return type** @@ -150,7 +150,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### creation\_date - + Return job creation date, in local time. **Return type** @@ -174,7 +174,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### error\_message - + Provide details about the reason of failure. @@ -192,7 +192,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### from\_jobs - + Return an instance of this class. The input job ID is used to query for sub-job information from the server. @@ -214,7 +214,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### header - + Return the user header specified for this job. **Return type** @@ -248,7 +248,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### name - + Return the name assigned to this job. **Return type** @@ -262,7 +262,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### properties - + Return the backend properties for this job. > **Args:** @@ -290,7 +290,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### queue\_info - + Return queue information for this job. This method returns the queue information of the sub-job that is last in queue. @@ -312,7 +312,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### queue\_position - + Return the position of the job in the server queue. This method returns the queue position of the sub-job that is last in queue. @@ -336,7 +336,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### refresh - + Obtain the latest job information from the server. This method may add additional attributes to this job instance, if new information becomes available. @@ -352,7 +352,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### report - + Return a report on current sub-job statuses. **Parameters** @@ -370,7 +370,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### rerun\_failed - + Re-submit all failed sub-jobs. @@ -384,7 +384,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### result - + Return the result of the job. @@ -446,7 +446,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### scheduling\_mode - + Return the scheduling mode the job is in. The scheduling mode indicates how the job is scheduled to run. For example, `fairshare` indicates the job is scheduled using a fairshare algorithm. @@ -466,7 +466,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### status - + Query the server for the latest job status. @@ -504,7 +504,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### sub\_job - + Retrieve the job used to submit the specified circuit. **Parameters** @@ -526,7 +526,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### sub\_jobs - + Return all submitted sub-jobs. **Parameters** @@ -544,7 +544,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### submit - + Unsupported method. @@ -562,7 +562,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### tags - + Return the tags assigned to this job. **Return type** @@ -576,7 +576,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### time\_per\_step - + Return the date and time information on each step of the job processing. The output dictionary contains the date and time information on each step of the job processing, in local time. The keys of the dictionary are the names of the steps, and the values are the date and time data, as a datetime object with local timezone info. For example: @@ -598,7 +598,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### update\_name - + Update the name associated with this job. @@ -625,7 +625,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### update\_tags - + Update the tags associated with this job. @@ -652,7 +652,7 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob ### wait\_for\_final\_state - + Wait until the job progresses to a final state such as `DONE` or `ERROR`. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.mdx index 6bd18edd0a7..5df0034cd7c 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobApiError # IBMJobApiError - + Errors that occur unexpectedly when querying the server. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.mdx index d74af418e7d..14395eb4688 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobError # IBMJobError - + Base class for errors raised by the job modules. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.mdx index 97a26493799..fe08fe55784 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobFailureError # IBMJobFailureError - + Errors raised when a job failed. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx index 8d565dd0d68..4b973740283 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobInvalidStateError # IBMJobInvalidStateError - + Errors raised when a job is not in a valid state for the operation. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx index 3098f64e6d4..22fc682895b 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobTimeoutError # IBMJobTimeoutError - + Errors raised when a job operation times out. Set the error message. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.mdx index deb265cc4fc..c310074adc2 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.job.QueueInfo # QueueInfo - + Queue information for a job. QueueInfo constructor. @@ -51,7 +51,7 @@ python_api_name: qiskit_ibm_provider.job.QueueInfo ### format - + Build a user-friendly report for the job queue information. **Return type** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.mdx index bba6b476d4e..46325fd645c 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.job_monitor # job\_monitor - + Monitor the status of an `IBMJob` instance. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.mdx index d91b25ef9b7..95f7dffba67 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.least_busy # least\_busy - + Return the least busy backend from a list. Return the least busy available backend for those that have a `pending_jobs` in their `status`. Note that local backends may not have this attribute. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx index 7ea503eff1b..308ef77349a 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAn # ALAPScheduleAnalysis - + Dynamic circuits as-late-as-possible (ALAP) scheduling analysis pass. This is a scheduler designed to work for the unique scheduling constraints of the dynamic circuits backends due to the limitations imposed by hardware. This is expected to evolve over time as the dynamic circuit backends also change. @@ -102,7 +102,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAn ### run - + Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)") :param dag: DAG to schedule. :type dag: DAGCircuit **Raises** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx index 88f645ff5c0..b38dcd3b84e 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAn # ASAPScheduleAnalysis - + Dynamic circuits as-soon-as-possible (ASAP) scheduling analysis pass. This is a scheduler designed to work for the unique scheduling constraints of the dynamic circuits backends due to the limitations imposed by hardware. This is expected to evolve over time as the dynamic circuit backends also change. @@ -102,7 +102,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAn ### run - + Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v1.0)") :param dag: DAG to schedule. :type dag: DAGCircuit **Raises** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx index 642ebefca36..aca5cf60ccc 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadde # BlockBasePadder - + The base class of padding pass. This pass requires one of scheduling passes to be executed before itself. Since there are multiple scheduling strategies, the selection of scheduling pass is left in the hands of the pass manager designer. Once a scheduling analysis pass is run, `node_start_time` is generated in the `property_set`. This information is represented by a python dictionary of the expected instruction execution times keyed on the node instances. The padding pass expects all `DAGOpNode` in the circuit to be scheduled. @@ -93,7 +93,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadde ### run - + Run the padding pass on `dag`. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx index d62ba538038..48fbb1d90c6 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuit # DynamicCircuitInstructionDurations - + For dynamic circuits the IBM Qiskit backend currently reports instruction durations that differ compared with those required for the legacy Qobj-based path. For now we use this class to report updated InstructionDurations. TODO: This would be mitigated by a specialized Backend/Target for dynamic circuit backends. Dynamic circuit instruction durations. @@ -27,7 +27,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuit ### from\_backend - + Construct a `DynamicInstructionDurations` object from the backend. **Parameters** @@ -45,7 +45,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuit ### from\_target - + Construct a `DynamicInstructionDurations` object from the target. **Parameters** @@ -104,7 +104,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuit ### update - + Update self with inst\_durations (inst\_durations overwrite self). Overrides the default durations for certain hardcoded instructions. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx index 4b18d79b217..61c9d9072a1 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay # PadDelay - + Padding idle time with Delay instructions. Consecutive delays will be merged in the output of this pass. @@ -105,7 +105,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay ### run - + Run the padding pass on `dag`. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx index 34cbffd5169..12a9381a797 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.mdx @@ -8,7 +8,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDe # PadDynamicalDecoupling - + Dynamical decoupling insertion pass for IBM dynamic circuit backends. This pass works on a scheduled, physical circuit. It scans the circuit for idle periods of time (i.e. those containing delay instructions) and inserts a DD sequence of gates in those spots. These gates amount to the identity, so do not alter the logical action of the circuit, but have the effect of mitigating decoherence in those idle periods. As a special case, the pass allows a length-1 sequence (e.g. \[XGate()]). In this case the DD insertion happens only when the gate inverse can be absorbed into a neighboring gate in the circuit (so we would still be replacing Delay with something that is equivalent to the identity). This can be used, for instance, as a Hahn echo. This pass ensures that the inserted sequence preserves the circuit exactly (including global phase). @@ -45,42 +45,6 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDe circ_dd.draw() ``` - ```python - ┌───┐ ┌───────────────┐ ┌───┐ » - q_0: ──────┤ H ├─────────■──┤ Delay(96[dt]) ├──────┤ X ├──────» - ┌─────┴───┴─────┐ ┌─┴─┐└───────────────┘┌─────┴───┴─────┐» - q_1: ┤ Delay(50[dt]) ├─┤ X ├────────■────────┤ Delay(48[dt]) ├» - ├───────────────┴┐└───┘ ┌─┴─┐ └───────────────┘» - q_2: ┤ Delay(750[dt]) ├───────────┤ X ├──────────────■────────» - ├────────────────┤ └───┘ ┌─┴─┐ » - q_3: ┤ Delay(950[dt]) ├────────────────────────────┤ X ├──────» - └────────────────┘ └───┘ » - meas: 4/═════════════════════════════════════════════════════════» - » - « ┌────────────────┐ ┌───┐ ┌───────────────┐ » - « q_0: ┤ Delay(208[dt]) ├──────┤ X ├──────┤ Delay(96[dt]) ├─────────────────» - « └─────┬───┬──────┘┌─────┴───┴─────┐└─────┬───┬─────┘┌───────────────┐» - « q_1: ──────┤ X ├───────┤ Delay(96[dt]) ├──────┤ X ├──────┤ Delay(56[dt]) ├» - « └───┘ └───────────────┘ └───┘ └───────────────┘» - « q_2: ─────────────────────────────────────────────────────────────────────» - « » - « q_3: ─────────────────────────────────────────────────────────────────────» - « » - «meas: 4/═════════════════════════════════════════════════════════════════════» - « » - « ░ ┌─┐ - « q_0: ─░─┤M├───────── - « ░ └╥┘┌─┐ - « q_1: ─░──╫─┤M├────── - « ░ ║ └╥┘┌─┐ - « q_2: ─░──╫──╫─┤M├─── - « ░ ║ ║ └╥┘┌─┐ - « q_3: ─░──╫──╫──╫─┤M├ - « ░ ║ ║ ║ └╥┘ - «meas: 4/════╩══╩══╩══╩═ - « 0 1 2 3 - ``` - ```python # Uhrig sequence on qubit 0 n = 8 @@ -101,31 +65,6 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDe circ_dd.draw() ``` - ```python - ┌───┐ ┌────────────────┐ ░ ┌─┐ » - q_0: ──────┤ H ├─────────■──┤ Delay(500[dt]) ├───────────────────░─┤M├──────» - ┌─────┴───┴─────┐ ┌─┴─┐└────────────────┘┌────────────────┐ ░ └╥┘┌─┐ » - q_1: ┤ Delay(50[dt]) ├─┤ X ├────────■─────────┤ Delay(300[dt]) ├─░──╫─┤M├───» - ├───────────────┴┐└───┘ ┌─┴─┐ └────────────────┘ ░ ║ └╥┘┌─┐» - q_2: ┤ Delay(750[dt]) ├───────────┤ X ├───────────────■──────────░──╫──╫─┤M├» - ├────────────────┤ └───┘ ┌─┴─┐ ░ ║ ║ └╥┘» - q_3: ┤ Delay(950[dt]) ├─────────────────────────────┤ X ├────────░──╫──╫──╫─» - └────────────────┘ └───┘ ░ ║ ║ ║ » - meas: 4/═══════════════════════════════════════════════════════════════╩══╩══╩═» - 0 1 2 » - « - « q_0: ─── - « - « q_1: ─── - « - « q_2: ─── - « ┌─┐ - « q_3: ┤M├ - « └╥┘ - «meas: 4/═╩═ - « 3 - ``` - You need to call [`ALAPScheduleAnalysis`](qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis "qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis") before running dynamical decoupling to guarantee your circuit satisfies acquisition alignment constraints for dynamic circuit backends. @@ -240,7 +179,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDe ### run - + Run the padding pass on `dag`. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.mdx index 338581f2e90..86cf84112a5 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.mdx @@ -26,6 +26,11 @@ A collection of scheduling passes for working with IBM Quantum’s next-generati Below we demonstrate how to schedule and pad a teleportation circuit with delays for a dynamic circuit backend’s execution model: +```python +import warnings +warnings.filterwarnings("ignore", category=DeprecationWarning) +``` + ```python from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager @@ -79,8 +84,6 @@ scheduled_teleport = pm.run(teleport) scheduled_teleport.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_1\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png) - Instead of padding with delays we may also insert a dynamical decoupling sequence using the [`PadDynamicalDecoupling`](qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling "qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling") pass as shown below: ```python @@ -104,8 +107,6 @@ dd_teleport = pm.run(teleport) dd_teleport.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_2\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png) - When compiling a circuit with Qiskit, it is more efficient and more robust to perform all the transformations in a single transpilation. This has been done above by extending Qiskit’s preset pass managers. For example, Qiskit’s [`transpile()`](/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v1.0)") function internally builds its pass set by using [`generate_preset_pass_manager()`](/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v1.0)"). This returns instances of [`StagedPassManager`](/api/qiskit/qiskit.transpiler.StagedPassManager "(in Qiskit v1.0)"), which can be extended. @@ -120,8 +121,6 @@ qc_c_if.x(0).c_if(0, 1) qc_c_if.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_3\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png) - The [`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.IBMBackend") configures a translation plugin `IBMTranslationPlugin` to automatically apply transformations and optimizations for IBM hardware backends when invoking [`transpile()`](/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v1.0)"). This will automatically convert all old style `c_if` conditioned gates to new-style control-flow. We may then schedule the transpiled circuit without further modification. ```python @@ -140,8 +139,6 @@ qc_if_dd = pm.run(qc_c_if, backend) qc_if_dd.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_4\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png) - If you are not using the transpiler plugin stages to work around this please manually run the pass [`qiskit.transpiler.passes.ConvertConditionsToIfOps`](/api/qiskit/qiskit.transpiler.passes.ConvertConditionsToIfOps "(in Qiskit v1.0)") prior to your scheduling pass. ```python @@ -160,8 +157,6 @@ qc_if_dd = pm.run(qc_c_if) qc_if_dd.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_5\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png) - ### Exploiting IBM backend’s local parallel “fast-path” @@ -183,8 +178,6 @@ with qc.if_test((1, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_6\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png) - The circuit below will not use the fast-path as the conditional gate is on a different qubit than the measurement qubit. ```python @@ -196,8 +189,6 @@ with qc.if_test((0, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_7\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png) - Similarly, the circuit below contains gates on multiple qubits and will not be performed using the fast-path. ```python @@ -210,8 +201,6 @@ with qc.if_test((0, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_8\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png) - A fast-path block may contain multiple gates as long as they are on the fast-path qubit. If there are multiple fast-path blocks being performed in parallel each block will be padded out to the duration of the longest block. ```python @@ -228,8 +217,6 @@ with qc.if_test((1, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_9\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png) - This behavior is also applied to the else condition of a fast-path eligible branch. ```python @@ -245,8 +232,6 @@ with else_: qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_10\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_10_0.png) - If a single measurement result is used with several conditional blocks, if there is a fast-path eligible block it will be applied followed by the non-fast-path blocks which will execute with the standard higher latency conditional branch. ```python @@ -263,8 +248,6 @@ with qc.if_test((0, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_11\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png) - If you wish to prevent the usage of the fast-path you may insert a barrier between the measurement and the conditional branch. ```python @@ -278,8 +261,6 @@ with qc.if_test((0, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_12\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png) - Conditional measurements are not eligible for the fast-path. ```python @@ -292,8 +273,6 @@ with qc.if_test((0, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_13\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png) - Similarly nested control-flow is not eligible. ```python @@ -308,8 +287,6 @@ with qc.if_test((0, 1)): qc.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_14\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png) - The scheduler is aware of the fast-path behavior and will not insert delays on idle qubits in blocks that satisfy the fast-path conditions so as to avoid preventing the backend compiler from performing the necessary optimizations to utilize the fast-path. If there are fast-path blocks that will be performed in parallel they currently *will not* be padded out by the scheduler to ensure they are of the same duration in Qiskit ```python @@ -342,8 +319,6 @@ qc_dd = pm.run(qc) qc_dd.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_15\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png) - If there are qubits that are *not* involved in a fast-path decision it is not currently possible to use them in a fast-path branch in parallel with the fast-path qubits resulting from a measurement. This will be revised in the future as we further improve these capabilities. @@ -365,8 +340,6 @@ qc_dd.draw(output="mpl", style="iqp") qc.draw(output="mpl", style="iqp") ``` - - ![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_16\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_16_0.png) diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.mdx index 59993069f8e..122ab59ee2b 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.utils.seconds_to_duration # seconds\_to\_duration - + Converts seconds in a datetime delta to a duration. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.mdx index 86f85ff371a..38cf9c072f1 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.utils.to_python_identifier # to\_python\_identifier - + Convert a name to a valid Python identifier. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.mdx index 2d1cb35acfe..c161fb932bb 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.utils.utc_to_local # utc\_to\_local - + Convert a UTC `datetime` object or string to a local timezone `datetime`. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.mdx index a3614b487c2..13cd10c9eaf 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.utils.validate_job_tags # validate\_job\_tags - + Validates input job tags. **Parameters** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.mdx index f9f93b50bc1..ea611b53b47 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.visualization.iplot_error_map # iplot\_error\_map - + Plot the error map of a device. **Parameters** @@ -37,6 +37,14 @@ python_api_name: qiskit_ibm_provider.visualization.iplot_error_map **Example** + ```python + from qiskit_ibm_provider.test.ibm_provider_mock import mock_get_backend + # Generate a mock provider for the sake of this example. + # This line will allow the mocked ``IBMProvider`` to return + # a fake backend in the following cell. + mock_get_backend('FakeOpenPulse2Q') + ``` + ```python from qiskit_ibm_provider import IBMProvider from qiskit_ibm_provider.visualization import iplot_error_map diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.mdx b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.mdx index 0f405549260..52108097684 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.mdx +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.mdx @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.visualization.iplot_gate_map # iplot\_gate\_map - + Plots an interactive gate map of a device. **Parameters** @@ -38,6 +38,14 @@ python_api_name: qiskit_ibm_provider.visualization.iplot_gate_map **Example** + ```python + from qiskit_ibm_provider.test.ibm_provider_mock import mock_get_backend + # Generate a mock provider for the sake of this example. + # This line will allow the mocked ``IBMProvider`` to return + # a fake backend in the following cell. + mock_get_backend('FakeOpenPulse2Q') + ``` + ```python from qiskit_ibm_provider import IBMProvider from qiskit_ibm_provider.visualization import iplot_gate_map diff --git a/docs/api/qiskit-ibm-provider/release-notes.mdx b/docs/api/qiskit-ibm-provider/release-notes.mdx index 2b9f646ae6a..c76c16f4861 100644 --- a/docs/api/qiskit-ibm-provider/release-notes.mdx +++ b/docs/api/qiskit-ibm-provider/release-notes.mdx @@ -6,12 +6,32 @@ in_page_toc_max_heading_level: 2 -# Qiskit IBM Provider 0.10 release notes +# Qiskit IBM Provider 0.11 release notes - + +## 0.11.0 + + + +### Upgrade Notes + +* Modify `skip_reset_qubits` optional flag to the constructor for [`PadDynamicalDecoupling`](qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling "qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling"). If `False`, dynamical decoupling is applied on qubits regardless of their state, even on delays that are at the beginning of a circuit. This option now matches the behavior in qiskit. + + + +### Deprecation Notes + +* ## `qiskit-ibm-provider` has been deprecated with its support ending and eventual archival being no sooner + + than 3 months from the release date of version 0.11.0. The function provided by qiskit-ibm-provider has been moved to `qiskit-ibm-runtime`. Please see the migration guide for more information [api/migration-guides/qiskit-runtime](/api/migration-guides/qiskit-runtime). + + + + + ## 0.10.0 @@ -24,12 +44,14 @@ in_page_toc_max_heading_level: 2 - + ## 0.9.0 + + ### Upgrade Notes * Extend `DynamicCircuitInstructions.from_backend()` to extract and patch durations from both `BackendV1` and `BackendV2` objects. Also add `DynamicCircuitInstructions.from_target()` to use a `Target` object instead. @@ -46,13 +68,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.8.0 - + ### New Features @@ -60,7 +82,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -68,7 +90,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -76,13 +98,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.7.1 - + ### New Features @@ -90,7 +112,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -98,7 +120,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -114,13 +136,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.7.0 - + ### New Features @@ -142,7 +164,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -160,13 +182,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.6.3 - + ### New Features @@ -174,7 +196,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -184,7 +206,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -198,13 +220,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.6.2 - + ### New Features @@ -214,7 +236,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -222,13 +244,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.6.1 - + ### New Features @@ -238,7 +260,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -246,7 +268,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -258,13 +280,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.6.0 - + ### New Features @@ -274,13 +296,15 @@ in_page_toc_max_heading_level: 2 + + ### Deprecation Notes * Removed support for input circuit as Schedule to IBMBackend.run(). Use `pulse gates` instead. See [here](/build/pulse) for how to use pulse gates. - + ### Bug Fixes @@ -292,13 +316,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.5.3 - + ### Upgrade Notes @@ -308,7 +332,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -322,13 +346,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.5.2 - + ### New Features @@ -336,7 +360,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -344,13 +368,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.5.1 - + ### Upgrade Notes @@ -358,13 +382,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.5.0 - + ### New Features @@ -372,7 +396,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -380,7 +404,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -388,13 +412,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.4.0 - + ### Bug Fixes @@ -402,13 +426,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.3.0 - + ### New Features @@ -449,7 +473,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -491,7 +515,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -499,13 +523,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.2.1 - + ### Bug Fixes @@ -513,13 +537,13 @@ in_page_toc_max_heading_level: 2 - + ## 0.2.0 - + ### New Features @@ -529,7 +553,7 @@ in_page_toc_max_heading_level: 2 - + ### Upgrade Notes @@ -537,7 +561,7 @@ in_page_toc_max_heading_level: 2 - + ### Bug Fixes @@ -551,7 +575,7 @@ in_page_toc_max_heading_level: 2 - + ## 0.1.0 @@ -565,7 +589,7 @@ qiskit-ibm-provider is a new Python API client for accessing the quantum systems - + ### New Features @@ -593,7 +617,7 @@ qiskit-ibm-provider is a new Python API client for accessing the quantum systems - + ### Upgrade Notes @@ -798,7 +822,7 @@ qiskit-ibm-provider is a new Python API client for accessing the quantum systems - + ### Deprecation Notes @@ -806,7 +830,7 @@ qiskit-ibm-provider is a new Python API client for accessing the quantum systems - + ### Bug Fixes diff --git a/public/api/qiskit-ibm-provider/0.10/objects.inv b/public/api/qiskit-ibm-provider/0.10/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..7c04b467aab0aaaafd4b03b23feda92c1e137983 GIT binary patch literal 3365 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 vt3hl{p?)h8Yw|i>5ie}9{(Ti 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png b/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0db7b6b93f0f5e876e1c99e5099cdbcd9e3b0cfa GIT binary patch literal 9687 zcmc(FWmweT+vgxix3nNIlyryGNQZ)egrtCg(j79C|% zx9$IUfXm+LJ$KK>o7bQdEC)qhX9$GA;5l%T&y04t{}3`od9~q=n@hInW09+5kJSQ@6T*-aPV8(KxY-8C}>fS@oHW# zLD+m|M1zs`USZN_=+_c8?88va&7Bfuz6{et+)9W1))uu7lzY2*dV6=k6W8ydE@Ey! z4Y75y)-$;?naPOA%WKPh{vwrlnq`v3 zD245VtzpKkn3m@Eb+MJ?dlU7_O2YMO%EKUnSsd()*=q8g_dR_&kEcn}^cV{>XWa?4 z`Xzm)GU77QkZhXX*S$I<9`EMrluwc&eOT#OP^M--dMfRmUG`i{HPj} zh@j7Lh?7ShPfz2wX^KU0WROYo@7*{W%OoY1&L}8QKHz(qsa;5~q|tm$BwUG`^UuQa z*}?13K*Fb-g`XR7<3D`cx0=Jq=1N5&AjrsgzR1j19W!$!sQuBbgThQZub=>X(d#5~ z&OFI%Z>qekva;rpc>D6;SG@9#+BeYdo^8Dif5MJj8APE=H{n=Q0Aj>63BL_ zK>Od4S6d8VPN?iUC7pBi&O{_6jP6RZW+u3xiKC-q@6b@s&jfZ}k0ayG?(Uz4#6-Fj zJ^#x&h>8^?GB-DW%El(GrA4~8zdur>%OC%Q)pci#HBXbxWq+m`rH~QIM-wn0pYY|& zO5$6eAN9_g4re=B$YxD~soB|%#YNiv*;<8Cqh>-fGW3L>mnc_#@hs&o+Zu{-fq{W& z!IVV0r0B_!BUaT@HMWoA;^WngjEq*DNJ&ZSoYt{R4C?(28{NLU?oLpMd+-F~Qa(^n zP(V5nNEc;hK7f?D9~yzfs!N(e%g{eKC?_rbK-6^yjfI7!%669Q`1trKE9;Lc%inZL z#FBs49@Y0338$)tfB`Yk)1!#F9|&Ob!r^e2oiQwRb@i>uQd%e!y0p7%UFM^ziZ5g{ z<@d~aW2rp|2T~C7MphQh$m_VP`}#WqvD20l-8(uu%HwtE@S$3-uC9(wM1&$aIr;K( zHQI6gCn;ER49IXZ-2Ed?ac+CNG{@T(1KQ`1rL8SQQW6DNawr{L+m^>0OH0;Y-<}14 zDK3xYzlI#pjtr*5Xq({|-N&mvc+wn_k_&vLR+i7<7YD@?Lgqh7UMBPXGh$tiemJxj zRPTEbm2ZF8v%{HKFt`|hi6I+QEnf=riLOjMG0Tg|yDhqYo&Uti*_qdB>?s)Lz*j+> z!=@Abxw$zAgx2Sheq$gRRjl!v`@!Bsamv8>S8i@@0vs}q=N1+@Ew)o-CKNCqaRDlo z;$15NDp`4XC?6j&B_-wM&B>7C_9zo3y~E{^3DQX!i?`rlen{1L?C_@ihP(Or?6Q00|5VqO5w`=!W+Sh7U|;Cz z=`AkYuTCu)Sy&!dnZJL(y4DweRuI4Dx^iR7p)4Ny-5Yt-KETDOo*VoruUsIDr)Md*LL?a4FOBUmgo;)$y4_=!Q5fK^lP$q#y z(ZZtU<_sXuL7WtSLNazs@BK)c!r^Z6n>2#sxgRccwRm6in6w8{^(;ImU{E%~a#8udgers&)^5mx(-2NKOuIbU*y6)st1=?@94;bKzIlp#JpP zfsP|1Mq4{~l@ZbimwInp#GQ%YB*(o+2WHqY9svzMOHW9~LVRrszcNk>lXtkmqP5C4~acYu2H#fWTPM*EAAS0$fTyv_`l62M}s;kFsvMle4qxUZP~Z zVxc6v=}e{>k*PI1J$9PCSo0sZMjwSJP@&$u7pw0seTH1K?ZP?=E=&o;e zN<|;0sxHm@W}B*eq1{h~y+z>8rX!2XunChq(mV2m{q7HQXIKB#_IiKfa+cIaIvI;+ z8#DL$eL4##<8)Z<#slSzPC$SpRm@%9%#0C4c}AbMEofEEWWvYshXrYO+eA-{s_kC-&1IOO?OBl}N6CIrs{ae;^1*@8s)SSbw`b1XMTDpj0s;a7 z>j~Uq{aPVUz1X7PulFU&me$imT=+2hC$w9~Zs!ubny#ZYZ@A_#O2r>@$OOrLF^PX? zR{acq&JjomVx-88_3!ES?{d>F?1(24R41E53Lif{BPJ#$q@)ZT$x`UoEdQSWI@fe( zET6e_vOtU7!^4A4Sa@>nJqtdyNZCwQVege;oi=0>QC-b-BDKQm72{D5%LcWg5Q58U z$N$bfgy|d{{|H@bK9^kDejtkNED!tN+XMn)8smHBovv8`9u*Mn*oJaJ@# zahEF}h4$tM)W52n@yCUTy6quA7Q0tA@7(qQ)t7N81Fcu1z%9ijN$r6cs;D{7f+`lm|DmYe(LnDuDo-=l$mqU?(2xJ;#w~DTesEdgm*NL*;~VZ)}MT*5-0pO@klj~y3IquLiwC1 zW6<Sy=g;$W;hY4Dkl_vN|-bOCw1I zBmDZBo{W?g@S%4AjTgnO?V+75E})kf1st@QY~j;9tePG_l!NYW?BTKspcVLdA4EG^ z2{`G<3f*`1B91ZR9Y&s*TibgFX>~`+IRVuqUK0_?=_(pIrgaBr$My&;-CzV06= zaS4W`FKR;Jl&tqpVu!zgK;q;BGDjPqa&JLYALD=~Yud z_4cFw{JG8*vh#BqOQX^vrolBR+p;c1mcJL#YqcFk9bk7MiCAUvgOdV+xZzY5GFB<3 ziRz1?m5v$iJ_HDFp=LD`R)f~=I#&S4veCoNWfDyq)lW%$L_55%^sC_D?Xlw~h-t3* zuXuSCN6xQ5%F4@X%YAT;2uaez%YO%N>w2hmyg#b_ip4LE7{Na2SHRYxYc2GgloYG4 zXBL`b8bcJTHG*`i(@U{xf0HMV7qWK1EF-5$o0&(^kWDjeJ7+Uoa=nf@_D(_H>@lEP zpm%B!GagR7ErPSoV_e>#xH*IGx2>ymNXdx|!;7iIdP$G_G04m{V>tdTkV;__lFzYP zV+wq3srwHgd9tfE?st^=@_DA$-*;eeS|Njabaf;AzP|j0S#vO$v!|^26O697A8tg8 zKocf|>!NrN5_;{m>JTdob+m>|z+P ztS5@f69k)s_0c2c z1Gct4ydYPu&R_nV#l!HZ(Mpg5M%yZapUGcnnH3EncjR0|A-+b3L&Y zrZ|)VnnFfM=(jsriV8u;rO2=+m+sXf)};WM!)8W-);o|!%*}ZHXF`&gJD0z|{~A{) zM+6WwggCjl@c;h(dk;3z37$kuO}(jq0mWIR_`mBOUu9#~H#VSvKBbDf`p3sVnyIl3 zzr6JL{Q0x-OqC^AfOM}vp>yWMM6r}MlJ^{mkcujd>BX1lh2v1bkpQo|=SaLJ?P%X% zzEA$mk(i+2Q;qJWKTrcujDLP+C6pHEgZD0^PvfkN3EZ%jRF3?G6W{s$dH0%dH2))m zj>R(}8ngQPdI~`+k}5q;i@~o!MMWIhIXTjWq8eDgo-Ros#$u17w zvp8Ih(s10pu&+8Er5J#p)f0BgUoNE%X*ixcrM)DbNLRs_9!Tbojg9?8$!}r2J^GJ> zGyJmP6tGl46uwtf5Cg95;O?GSt^v&qR#(sOSo?UrykZmG=}y~XE5_4?de}-F)sgE| zW;SR^$zB9Y!K(m;=-uxel@HSuOk|vTW-iG_&7LTb_V)HuTLOP>z^9_3q6AxNQV@!) zs^3~83T_#G)ElSXek> z{w*~X0P1OgL5=}EXai7{h=?dsgPllSM!)P2+9=mt_o!~{o8!r+r}(y!!aCGFU8fJ~ zUla<1p@Axf%Hw6*vC7BC2LY)3?iLxFkPrllu<3Ay6rMgKkvc}*V@na3kKBo%jL9sMDo#)lW_fV6uCxu5C3KzXCkV>2cuCWv1}1z*;Q zusizlau}G-n*m)C_g;q zvFV?%ShcV$A6Zv1sg&B--;Zo+5(n`IWn=qkY^1GCW-*k82ick^)(?0)yu80ZpMivh zDi=@O%>&|K^;_8(2Zkz~1@ynkivKmUWG*m8E4X9j6nx;~EFu}1!P_5h!&eCb(jBnkQfX1)6_RLEMmm_Dm zH21`yMZmz&5J6vG9|f-|+P81tV$#y^U%h(e1txia&H=K=^aDAq#&%*&?R0-Rs2293 zE6AFFyLxgPEvKoP*3F7kyP5p;3xbIuAV55LuBJu^z-vJ@IXO84AP8&;*g$;|tY9XJ z{Ub5HfQn;u5GupsTxMf?_F{j?u+Ki`bwuP~PCya!`=PWT!Uvx|eH#8CFuq~G&_oGw z0K6|?+s_XY7!snRpN8nA`rm*^D+(39Ue)xLJA?ACs_apZg@0|G0^Oh-q%HK~NCe_# z2OYokn=39UDAbBa2wtvWn?`akMpLW&LG1l-rU*qS{{6Z}1ak8<{(oMX)_o>BUSaKg^X#Q-%zDD(zY?ONZ?bop{}#zXD>O>D#=my17shzH+281y3 zFtG31a#r)$1>`x;FG>Z2`CT5=efecgVe4l#!>G7W%sH9f11_y3wWXz{$Hlxmuls?)%}M&*=SBgjmH%b%2llde zJ@^6J1h5-I@HU1P{JiLHsf@=)Ot7$!NWfP=KT=mt4q@ znG-B!5#%CDgN=i;ys~0C>M4zBfaJu{5>1tYn`Owpf8{wB5rQHUZzXVXP+@DwO2=Q?1?(eZQYDk zI2B!4!6Scz3Y(Y~4PSAqsHj-l-?tq;Hx^}Q4+k+78TQUhd!uqlvIA(p<)CO(J}`N% zNlyMuK$!?nTe=OYgwTik6 zlXv1p{zzOr?QF zUyWWDH7Zsj6WC8+?|NeBWrl$wAtEZ;4&0KCV7!jjJEXlP@*2w=tl)&V~x-}PCAA#TMT8wW=xI7Gabql|lV^^frJ@iB350#tK5hG2IQ z~c^?P2F)Q`z)tP93wSA`f(nc)k_^8iEu4;vgE3$)Mkkdj!OzEom%vQ zFsiteLVlxU@$MqmXY%Mvm&dD9O&|I9_V(_x7BI8Mjaw2E$v1wbTD#rJb(ufqs2Q+~ z9^Y^rU(C~XN?fmF97ZnsH4C8{LoGA!CxcvYv-*m6a{L$^pWbujbQQ>9tgW>FT5aUEVejBBh(sh8y;9w_3Z7TPL zP{OlKpOlrUDb!|YR{3>EshVbz{ir7|YKWs(r+g z4^XWQH`fz6^@G8;W)ya)b=TuelzX27{8vFv?qM(iZ4^kPlmkP*esyQcg;VYKp`3jT z3n>OhlzeLX?IQ4Pi{7@jd}7b+uJJsx0_Cz)wZG+b^hFbW1J)|hv@aG}D+5=ux*yJ&WoP8cxo9GI;WC5GW=yOZ|@6F9S< zYHNkTD)8FPiM&h`r`(aJD4cUs!x zSdxIHMwVAO-Ct4?5@Y1mnTY49{naB%oldHGk0dyM~No1Vor=85l%Z{?0K0l5m~NHnEqtce(M82k}?;Md{v3 zH)wFdD%2_M29-D**kpQ><+ZgvV5!Q0Tz>WW6s;M%|h?#{NYud71_;K^G{n-F z$7hpo!|mo9LPtk6kQI|9hQN$^!fYG86MPL3Bx^bJ<2V2$1`!_K0c=U4M~_f}mkc0A zR{!n!to;W-g?&Wn=peefx_L!KvbwsIrlzJ5C7VDIPWQRG_Y~zpBsMiS<6T|u*DmsW z7^VXu_XLD`XLsb|YX}F2jZ`n4cyasknrM z%0bWIARfS9X9Y~m%;-Q{ka2Ml02?3D*4E~Err_G)?FYa`gxUJxVKlHFc5;9J{=K}q ziVC8Tgp^d`c-8~h6UOh~V-#x_-pQu{G6j4%WCidUpBHKu1K%Pt7-`bW0p7o`CRwXg zvk9i$K0B+wx7hj?lU`O!E1}N&x@N>22M0$EH0b<$vKd4u-E{M(-*lo#m)X|-&syI~ zs`~~J`oL?Wdk{dR-5CJKRBugQh4Cq$Owl50D!+@I@4n%~|r6uEX z09@$<345Yx$?vyQuUH$C{@!hr16Wti&aQ+|8ZkVq28cK(qY|<0Ocl|P#KpH{7$@cZ zYT=~&yt=>RbN#RT4<6+hf?-ET4w~B9R8>KNfySU9^J&ROMuI`!UuFT?$OcJk7u*D~OVus%(k0vHyPnGzeU| literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png b/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png new file mode 100644 index 0000000000000000000000000000000000000000..47ff556d048c28452bf24fd7ccf033674b0d717c GIT binary patch literal 7004 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png b/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png new file mode 100644 index 0000000000000000000000000000000000000000..118ec8d280dc50c4bd0ed02b057ed7b774ea10b9 GIT binary patch literal 7246 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
a(nUB|;p~p`C0lbi$>EpFnMY$JN<gu& zw6C|#53W#`@mbF4RxA?QZE4FbYJPq`zr#9mQ*$$nnv2ZNTrH=|;d~fKIkF!8C;e3N zyKXP`CdPm#W1C-CxUf;2Gv@{N(YZTOX#aTcHec_E)cSbKn&$I(BNv_8tAUS-Ge$_! zzVmM7^Tr>AP{Bk$Mel}>`(=5EzyPxbu9fn>y=Dr3t^6%5B67P=-t&Pqn=*1lqc$sp z*rU58$X9dam;%rLL#MlhT7lBHw19q9b)4Gr%|g>Kp=b$Hvnb!>pV(E`0^b(cJBlC7 z>|8)uP=DHd86}NlpF%rAx5`X^D2yp%e<6jC0_!M@lmr+2o7}uffI2kGT(q@(Tp2i` zSm0C6wuY=I+GR79+7=clW@cvO<>kdwc&#DxPq22!%Mwu+b2ZixWo6H!Xtju%-7gAG z4RXJ0XlSU-y+?+C3@vD)P#q2e3kzFjK0=G^uXJ$BGxDK-Y41gPN=n3(o(G1BiAh;S zMaOKlRblhUWfb3{xSL!3q=}mAlhakV&eezAoh8T0=bX%gp*SQls1Dge?A+!l#UlH5 z_Iv!(b6U$$ii&H^7ewfjH6DjP)Dkk)eYyONhV`!67w0=2jY;I{7XeOR^{H>Cg$itHH535fSp=T==vG8+AdU9rWXu{-+Y96+lV70Z)7DVaJ z?fCho_{HwpHC(qB)%Y*wjkc)|<^1FIA>G1HN#@`3Sk5{I1~5Q+Ji;0*>lW0Kmxl}i zJ0r{aW^*7VE;SVccmd$$3byoHJW0MXyep{i78i$b=(iNP3X_nK$iI76e0GZ^I{hj| z?CDS@ z;|E}8)z3Oxsc3Wg3;};(zbw9S{08b}YBH{lkCzGD;p+IRc10#9Cy&q1U#h(9&haPT zLHuNUi0^}re%Y3ip4uKA@Q1(l2F3GEfvLlEpG*Gkkdl%|FWLRN`S<9k1qdwKD~n#5jJE@Q5$~Yy)~`c6T7S7Bh=;=2}|Xr|1t-3uX~ua zRxHc0Zw_t0t9SW`u&}VASkG@Qzacy}<284~r|( zRtHS5ITvEK#QGAAH<%9evj=o#?3sCMQZ4tNJ8crK#yqAEN>~i)c6pwo;ku4{QC7y|M+-HtRavVx&@wyUI}HDAHMC;6`j9yT7GrEl6gFAS-*yRw$0$(xB4P^^ zRHUt7yTHZ&z5)9{NlD4q-yimeup90Rvq5QPWgKt|)N%6I#Kd{!1KT4%?a#NBFJcoQ zcBkvF=;`SV`jfaY9&oEF%FF#KD_@Y4lRJ?TJ&xwQaVG!{WP3Z*bl`jY@82?3u4J^T z6C+bNM}voc+tY77t1@>(xfAgY4R#W@jx{)4`%_nK1ChgaiH1Ou{t_dqqVL_i$HzO{ z(5z69lc zO9y{P5W%P&*uX(BF)>3UBLf>7h0@%2nVYUxBetQj_F&dTMKNq5q_B{6(fiICokCD8 z*9g?tpu*PvTDWV;vhDXbME+p5x{yZ7@_9)~iM#FsDA;Lf$A14)hU*zyuBRY7{$mINxoojPesJPoOWjviR*L+2Cf1W$ z_tzu)SFWwZV*JM+H$#f@QNsErJ{0Lxm|G>*_U99v%lON1JuYdaoue3Y75EB|#W;5- zggTGzt`ARe*unQl)*7{+5cAaXm{@-Qky)a>QlVu?(?T=RMEI5yKO|XSw#i3-AdH!x zLmu;R#lwH=CZVYnJ-Xi*`gk?PBwyfpdfI%z;Z=`!BKGv�ON*w8tBE`>AE{E_&=M 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png b/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6669b990a37aee86d4bffb56f2857fedc1c7691a GIT binary patch literal 3565 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png b/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png new file mode 100644 index 0000000000000000000000000000000000000000..bc63d5d05e5ba09c871ecb9de74846714645c8df GIT binary patch literal 7598 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png b/public/images/api/qiskit-ibm-provider/0.10/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png new file mode 100644 index 0000000000000000000000000000000000000000..38e621e254a24439a89d18b8cc958e43bef81d30 GIT binary patch literal 8263 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

m;C?$uB@-;FI|Gb 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 z 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 Date: Wed, 17 Apr 2024 16:29:43 -0400 Subject: [PATCH 2/3] Load run file needed by link checker --- scripts/commands/checkInternalLinks.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/commands/checkInternalLinks.ts b/scripts/commands/checkInternalLinks.ts index e8239414342..ba46ab23079 100644 --- a/scripts/commands/checkInternalLinks.ts +++ b/scripts/commands/checkInternalLinks.ts @@ -97,7 +97,10 @@ async function main() { console.log("\nNo links appear broken ✅\n"); } -const PROVIDER_GLOBS_TO_LOAD = ["docs/api/qiskit/*.mdx"]; +const PROVIDER_GLOBS_TO_LOAD = [ + "docs/api/qiskit/*.mdx", + "docs/run/max-execution-time.mdx", +]; const RUNTIME_GLOBS_TO_LOAD = [ "docs/api/qiskit/providers_models.mdx", "docs/api/qiskit-ibm-runtime/options.mdx", From c5f3fcb9b920780f22c3ddbb3f9b38b77bf8caaf Mon Sep 17 00:00:00 2001 From: Eric Arellano <14852634+Eric-Arellano@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:34:50 -0400 Subject: [PATCH 3/3] Fix orphan page --- scripts/commands/checkOrphanPages.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/commands/checkOrphanPages.ts b/scripts/commands/checkOrphanPages.ts index e3cdaf86920..edd76800ad3 100644 --- a/scripts/commands/checkOrphanPages.ts +++ b/scripts/commands/checkOrphanPages.ts @@ -143,6 +143,7 @@ function apiDocsIgnores(): string[] { "0.7/", "0.8/", "0.9/", + "0.10/", "0.14/", "0.15/", "0.16/",