From 1561289068a5641c8e976d601aaeb4c6cf9b5e2b Mon Sep 17 00:00:00 2001 From: Eric Arellano <14852634+Eric-Arellano@users.noreply.github.com> Date: Thu, 8 Feb 2024 10:39:02 -0500 Subject: [PATCH 1/3] Generate Provider 0.8 and 0.9 docs --- .../api/qiskit-ibm-provider/0.7/_package.json | 4 + docs/api/qiskit-ibm-provider/0.7/_toc.json | 214 +++++ docs/api/qiskit-ibm-provider/0.7/ibm_job.md | 46 + .../qiskit-ibm-provider/0.7/ibm_jupyter.md | 57 ++ .../qiskit-ibm-provider/0.7/ibm_provider.md | 66 ++ .../qiskit-ibm-provider/0.7/ibm_transpiler.md | 28 + docs/api/qiskit-ibm-provider/0.7/ibm_utils.md | 36 + .../0.7/ibm_visualization.md | 35 + docs/api/qiskit-ibm-provider/0.7/index.md | 14 + .../0.7/qiskit_ibm_provider.IBMBackend.md | 740 ++++++++++++++++ .../qiskit_ibm_provider.IBMBackendApiError.md | 18 + ...ibm_provider.IBMBackendApiProtocolError.md | 18 + .../qiskit_ibm_provider.IBMBackendError.md | 18 + .../qiskit_ibm_provider.IBMBackendService.md | 174 ++++ ...iskit_ibm_provider.IBMBackendValueError.md | 18 + .../0.7/qiskit_ibm_provider.IBMError.md | 18 + .../0.7/qiskit_ibm_provider.IBMProvider.md | 386 ++++++++ .../qiskit_ibm_provider.IBMProviderError.md | 18 + ...skit_ibm_provider.IBMProviderValueError.md | 18 + .../0.7/qiskit_ibm_provider.Session.md | 109 +++ .../qiskit_ibm_provider.job.IBMCircuitJob.md | 675 ++++++++++++++ ...qiskit_ibm_provider.job.IBMCompositeJob.md | 823 ++++++++++++++++++ .../qiskit_ibm_provider.job.IBMJobApiError.md | 18 + .../qiskit_ibm_provider.job.IBMJobError.md | 18 + ...kit_ibm_provider.job.IBMJobFailureError.md | 18 + ...bm_provider.job.IBMJobInvalidStateError.md | 18 + ...kit_ibm_provider.job.IBMJobTimeoutError.md | 18 + .../0.7/qiskit_ibm_provider.job.QueueInfo.md | 80 ++ .../qiskit_ibm_provider.job.job_monitor.md | 28 + .../0.7/qiskit_ibm_provider.least_busy.md | 36 + ...it_ibm_provider.transpiler.passes.basis.md | 22 + .../qiskit_ibm_provider.transpiler.passes.md | 27 + ....passes.scheduling.ALAPScheduleAnalysis.md | 163 ++++ ....passes.scheduling.ASAPScheduleAnalysis.md | 163 ++++ ...piler.passes.scheduling.BlockBasePadder.md | 157 ++++ ...ling.DynamicCircuitInstructionDurations.md | 140 +++ ...r.transpiler.passes.scheduling.PadDelay.md | 169 ++++ ...asses.scheduling.PadDynamicalDecoupling.md | 304 +++++++ ...m_provider.transpiler.passes.scheduling.md | 381 ++++++++ ..._ibm_provider.utils.seconds_to_duration.md | 30 + ...ibm_provider.utils.to_python_identifier.md | 30 + .../qiskit_ibm_provider.utils.utc_to_local.md | 34 + ...it_ibm_provider.utils.validate_job_tags.md | 31 + ..._provider.visualization.iplot_error_map.md | 52 ++ ...m_provider.visualization.iplot_gate_map.md | 53 ++ .../api/qiskit-ibm-provider/0.8/_package.json | 4 + docs/api/qiskit-ibm-provider/0.8/_toc.json | 213 +++++ docs/api/qiskit-ibm-provider/0.8/ibm_job.md | 46 + .../qiskit-ibm-provider/0.8/ibm_jupyter.md | 57 ++ .../qiskit-ibm-provider/0.8/ibm_provider.md | 66 ++ .../qiskit-ibm-provider/0.8/ibm_transpiler.md | 28 + docs/api/qiskit-ibm-provider/0.8/ibm_utils.md | 36 + .../0.8/ibm_visualization.md | 35 + docs/api/qiskit-ibm-provider/0.8/index.md | 14 + .../0.8/qiskit_ibm_provider.IBMBackend.md | 664 ++++++++++++++ .../qiskit_ibm_provider.IBMBackendApiError.md | 18 + ...ibm_provider.IBMBackendApiProtocolError.md | 18 + .../qiskit_ibm_provider.IBMBackendError.md | 18 + .../qiskit_ibm_provider.IBMBackendService.md | 168 ++++ ...iskit_ibm_provider.IBMBackendValueError.md | 18 + .../0.8/qiskit_ibm_provider.IBMError.md | 18 + .../0.8/qiskit_ibm_provider.IBMProvider.md | 362 ++++++++ .../qiskit_ibm_provider.IBMProviderError.md | 18 + ...skit_ibm_provider.IBMProviderValueError.md | 18 + .../0.8/qiskit_ibm_provider.Session.md | 99 +++ .../qiskit_ibm_provider.job.IBMCircuitJob.md | 613 +++++++++++++ ...qiskit_ibm_provider.job.IBMCompositeJob.md | 753 ++++++++++++++++ .../qiskit_ibm_provider.job.IBMJobApiError.md | 18 + .../qiskit_ibm_provider.job.IBMJobError.md | 18 + ...kit_ibm_provider.job.IBMJobFailureError.md | 18 + ...bm_provider.job.IBMJobInvalidStateError.md | 18 + ...kit_ibm_provider.job.IBMJobTimeoutError.md | 18 + .../0.8/qiskit_ibm_provider.job.QueueInfo.md | 70 ++ .../qiskit_ibm_provider.job.job_monitor.md | 28 + .../0.8/qiskit_ibm_provider.least_busy.md | 36 + ...it_ibm_provider.transpiler.passes.basis.md | 22 + .../qiskit_ibm_provider.transpiler.passes.md | 27 + ....passes.scheduling.ALAPScheduleAnalysis.md | 153 ++++ ....passes.scheduling.ASAPScheduleAnalysis.md | 153 ++++ ...piler.passes.scheduling.BlockBasePadder.md | 147 ++++ ...ling.DynamicCircuitInstructionDurations.md | 128 +++ ...r.transpiler.passes.scheduling.PadDelay.md | 159 ++++ ...asses.scheduling.PadDynamicalDecoupling.md | 294 +++++++ ...m_provider.transpiler.passes.scheduling.md | 381 ++++++++ ..._ibm_provider.utils.seconds_to_duration.md | 30 + ...ibm_provider.utils.to_python_identifier.md | 30 + .../qiskit_ibm_provider.utils.utc_to_local.md | 34 + ...it_ibm_provider.utils.validate_job_tags.md | 31 + ..._provider.visualization.iplot_error_map.md | 52 ++ ...m_provider.visualization.iplot_gate_map.md | 53 ++ docs/api/qiskit-ibm-provider/_package.json | 2 +- docs/api/qiskit-ibm-provider/ibm_jupyter.md | 2 +- docs/api/qiskit-ibm-provider/ibm_utils.md | 78 ++ .../qiskit_ibm_provider.IBMBackend.md | 236 ++--- .../qiskit_ibm_provider.IBMBackendApiError.md | 2 +- ...ibm_provider.IBMBackendApiProtocolError.md | 2 +- .../qiskit_ibm_provider.IBMBackendError.md | 2 +- .../qiskit_ibm_provider.IBMBackendService.md | 16 +- ...iskit_ibm_provider.IBMBackendValueError.md | 2 +- .../qiskit_ibm_provider.IBMError.md | 2 +- .../qiskit_ibm_provider.IBMProvider.md | 54 +- .../qiskit_ibm_provider.IBMProviderError.md | 2 +- ...skit_ibm_provider.IBMProviderValueError.md | 2 +- .../qiskit_ibm_provider.Session.md | 43 +- .../qiskit_ibm_provider.job.IBMCircuitJob.md | 148 +--- ...qiskit_ibm_provider.job.IBMCompositeJob.md | 172 ++-- .../qiskit_ibm_provider.job.IBMJobApiError.md | 2 +- .../qiskit_ibm_provider.job.IBMJobError.md | 2 +- ...kit_ibm_provider.job.IBMJobFailureError.md | 2 +- ...bm_provider.job.IBMJobInvalidStateError.md | 2 +- ...kit_ibm_provider.job.IBMJobTimeoutError.md | 2 +- .../qiskit_ibm_provider.job.QueueInfo.md | 18 +- .../qiskit_ibm_provider.job.job_monitor.md | 2 +- .../qiskit_ibm_provider.least_busy.md | 6 +- ....passes.scheduling.ALAPScheduleAnalysis.md | 38 +- ....passes.scheduling.ASAPScheduleAnalysis.md | 40 +- ...piler.passes.scheduling.BlockBasePadder.md | 36 +- ...ling.DynamicCircuitInstructionDurations.md | 54 +- ...r.transpiler.passes.scheduling.PadDelay.md | 36 +- ...asses.scheduling.PadDynamicalDecoupling.md | 42 +- ...m_provider.transpiler.passes.scheduling.md | 47 +- ..._ibm_provider.utils.seconds_to_duration.md | 2 +- ...ibm_provider.utils.to_python_identifier.md | 2 +- .../qiskit_ibm_provider.utils.utc_to_local.md | 2 +- ...it_ibm_provider.utils.validate_job_tags.md | 2 +- ..._provider.visualization.iplot_error_map.md | 6 +- ...m_provider.visualization.iplot_gate_map.md | 12 +- docs/api/qiskit-ibm-provider/release-notes.md | 16 +- public/api/qiskit-ibm-provider/objects.inv | Bin 4948 -> 3365 bytes ...vider.transpiler.passes.scheduling_0_0.png | Bin 0 -> 57858 bytes ...ider.transpiler.passes.scheduling_10_0.png | Bin 0 -> 9687 bytes ...ider.transpiler.passes.scheduling_11_0.png | Bin 0 -> 7004 bytes ...ider.transpiler.passes.scheduling_12_0.png | Bin 0 -> 6991 bytes ...ider.transpiler.passes.scheduling_13_0.png | Bin 0 -> 7246 bytes ...ider.transpiler.passes.scheduling_14_0.png | Bin 0 -> 18297 bytes ...ider.transpiler.passes.scheduling_15_0.png | Bin 0 -> 11921 bytes ...ider.transpiler.passes.scheduling_16_0.png | Bin 0 -> 11883 bytes ...vider.transpiler.passes.scheduling_1_0.png | Bin 0 -> 64192 bytes ...vider.transpiler.passes.scheduling_2_0.png | Bin 0 -> 3565 bytes ...vider.transpiler.passes.scheduling_3_0.png | Bin 0 -> 21200 bytes ...vider.transpiler.passes.scheduling_4_0.png | Bin 0 -> 21200 bytes ...vider.transpiler.passes.scheduling_5_0.png | Bin 0 -> 11208 bytes ...vider.transpiler.passes.scheduling_6_0.png | Bin 0 -> 7598 bytes ...vider.transpiler.passes.scheduling_7_0.png | Bin 0 -> 8263 bytes ...vider.transpiler.passes.scheduling_8_0.png | Bin 0 -> 12759 bytes ...vider.transpiler.passes.scheduling_9_0.png | Bin 0 -> 9282 bytes ...vider.transpiler.passes.scheduling_0_0.png | Bin 0 -> 57858 bytes ...ider.transpiler.passes.scheduling_10_0.png | Bin 0 -> 9687 bytes ...ider.transpiler.passes.scheduling_11_0.png | Bin 0 -> 7004 bytes ...ider.transpiler.passes.scheduling_12_0.png | Bin 0 -> 6991 bytes ...ider.transpiler.passes.scheduling_13_0.png | Bin 0 -> 7246 bytes ...ider.transpiler.passes.scheduling_14_0.png | Bin 0 -> 18297 bytes ...ider.transpiler.passes.scheduling_15_0.png | Bin 0 -> 11921 bytes ...vider.transpiler.passes.scheduling_1_0.png | Bin 0 -> 64192 bytes ...vider.transpiler.passes.scheduling_2_0.png | Bin 0 -> 3565 bytes ...vider.transpiler.passes.scheduling_3_0.png | Bin 0 -> 21200 bytes ...vider.transpiler.passes.scheduling_4_0.png | Bin 0 -> 21200 bytes ...vider.transpiler.passes.scheduling_5_0.png | Bin 0 -> 11208 bytes ...vider.transpiler.passes.scheduling_6_0.png | Bin 0 -> 7598 bytes ...vider.transpiler.passes.scheduling_7_0.png | Bin 0 -> 8263 bytes ...vider.transpiler.passes.scheduling_8_0.png | Bin 0 -> 12759 bytes ...vider.transpiler.passes.scheduling_9_0.png | Bin 0 -> 9282 bytes ...ider.transpiler.passes.scheduling_10_0.png | Bin 9687 -> 9282 bytes ...ider.transpiler.passes.scheduling_11_0.png | Bin 7004 -> 9687 bytes ...ider.transpiler.passes.scheduling_12_0.png | Bin 6991 -> 7004 bytes ...ider.transpiler.passes.scheduling_13_0.png | Bin 7246 -> 6991 bytes ...ider.transpiler.passes.scheduling_14_0.png | Bin 18297 -> 7246 bytes ...ider.transpiler.passes.scheduling_15_0.png | Bin 11921 -> 18297 bytes ...ider.transpiler.passes.scheduling_16_0.png | Bin 11883 -> 11921 bytes ...vider.transpiler.passes.scheduling_1_0.png | Bin 64192 -> 57845 bytes ...vider.transpiler.passes.scheduling_2_0.png | Bin 3565 -> 63023 bytes ...vider.transpiler.passes.scheduling_3_0.png | Bin 21200 -> 3565 bytes ...vider.transpiler.passes.scheduling_5_0.png | Bin 11208 -> 21200 bytes ...vider.transpiler.passes.scheduling_6_0.png | Bin 7598 -> 11208 bytes ...vider.transpiler.passes.scheduling_7_0.png | Bin 8263 -> 7598 bytes ...vider.transpiler.passes.scheduling_8_0.png | Bin 12759 -> 8263 bytes ...vider.transpiler.passes.scheduling_9_0.png | Bin 9282 -> 12759 bytes scripts/api-html-artifacts.json | 4 +- 178 files changed, 11183 insertions(+), 682 deletions(-) create mode 100644 docs/api/qiskit-ibm-provider/0.7/_package.json create mode 100644 docs/api/qiskit-ibm-provider/0.7/_toc.json create mode 100644 docs/api/qiskit-ibm-provider/0.7/ibm_job.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/ibm_jupyter.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/ibm_provider.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/ibm_transpiler.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/ibm_utils.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/ibm_visualization.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/index.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackend.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiProtocolError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendService.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendValueError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProvider.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderValueError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.Session.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCircuitJob.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCompositeJob.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobApiError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobFailureError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobInvalidStateError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobTimeoutError.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.QueueInfo.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.job_monitor.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.least_busy.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.basis.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.seconds_to_duration.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.to_python_identifier.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.utc_to_local.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.validate_job_tags.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_error_map.md create mode 100644 docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_gate_map.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/_package.json create mode 100644 docs/api/qiskit-ibm-provider/0.8/_toc.json create mode 100644 docs/api/qiskit-ibm-provider/0.8/ibm_job.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/ibm_jupyter.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/ibm_provider.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/ibm_transpiler.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/ibm_utils.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/ibm_visualization.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/index.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackend.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiProtocolError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendService.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendValueError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProvider.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderValueError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.Session.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCircuitJob.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCompositeJob.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobApiError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobFailureError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobInvalidStateError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobTimeoutError.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.QueueInfo.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.job_monitor.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.least_busy.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.basis.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.seconds_to_duration.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.to_python_identifier.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.utc_to_local.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.validate_job_tags.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_error_map.md create mode 100644 docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_gate_map.md create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_0_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_10_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_16_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_0_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_10_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_11_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_14_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_7_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_8_0.png create mode 100644 public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png diff --git a/docs/api/qiskit-ibm-provider/0.7/_package.json b/docs/api/qiskit-ibm-provider/0.7/_package.json new file mode 100644 index 00000000000..5ff0aaffa87 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/_package.json @@ -0,0 +1,4 @@ +{ + "name": "qiskit-ibm-provider", + "version": "0.7.3" +} diff --git a/docs/api/qiskit-ibm-provider/0.7/_toc.json b/docs/api/qiskit-ibm-provider/0.7/_toc.json new file mode 100644 index 00000000000..3ab6d002c82 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/_toc.json @@ -0,0 +1,214 @@ +{ + "title": "Qiskit IBM Provider", + "children": [ + { + "title": "qiskit_ibm_provider", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/ibm_provider" + }, + { + "title": "IBMBackend", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackend" + }, + { + "title": "IBMBackendApiError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiError" + }, + { + "title": "IBMBackendApiProtocolError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiProtocolError" + }, + { + "title": "IBMBackendError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendError" + }, + { + "title": "IBMBackendService", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendService" + }, + { + "title": "IBMBackendValueError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendValueError" + }, + { + "title": "IBMError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMError" + }, + { + "title": "IBMProvider", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProvider" + }, + { + "title": "IBMProviderError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderError" + }, + { + "title": "IBMProviderValueError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderValueError" + }, + { + "title": "least_busy", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.least_busy" + }, + { + "title": "Session", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.Session" + } + ] + }, + { + "title": "qiskit_ibm_provider.job", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/ibm_job" + }, + { + "title": "IBMCircuitJob", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCircuitJob" + }, + { + "title": "IBMCompositeJob", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCompositeJob" + }, + { + "title": "IBMJobApiError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobApiError" + }, + { + "title": "IBMJobError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobError" + }, + { + "title": "IBMJobFailureError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobFailureError" + }, + { + "title": "IBMJobInvalidStateError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobInvalidStateError" + }, + { + "title": "IBMJobTimeoutError", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobTimeoutError" + }, + { + "title": "job_monitor", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.job_monitor" + }, + { + "title": "QueueInfo", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.QueueInfo" + } + ] + }, + { + "title": "qiskit_ibm_provider.jupyter", + "url": "/api/qiskit-ibm-provider/0.7/ibm_jupyter" + }, + { + "title": "qiskit_ibm_provider.transpiler", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/ibm_transpiler" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes.basis", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.basis" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes.scheduling", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling" + }, + { + "title": "ALAPScheduleAnalysis", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis" + }, + { + "title": "ASAPScheduleAnalysis", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis" + }, + { + "title": "BlockBasePadder", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder" + }, + { + "title": "DynamicCircuitInstructionDurations", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations" + }, + { + "title": "PadDelay", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay" + }, + { + "title": "PadDynamicalDecoupling", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling" + } + ] + } + ] + } + ] + }, + { + "title": "qiskit_ibm_provider.utils", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/ibm_utils" + }, + { + "title": "seconds_to_duration", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.seconds_to_duration" + }, + { + "title": "to_python_identifier", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.to_python_identifier" + }, + { + "title": "utc_to_local", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.utc_to_local" + }, + { + "title": "validate_job_tags", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.validate_job_tags" + } + ] + }, + { + "title": "qiskit_ibm_provider.visualization", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.7/ibm_visualization" + }, + { + "title": "iplot_error_map", + "url": "/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_error_map" + }, + { + "title": "iplot_gate_map", + "url": "/api/qiskit-ibm-provider/0.7/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.7/ibm_job.md b/docs/api/qiskit-ibm-provider/0.7/ibm_job.md new file mode 100644 index 00000000000..c3aa144d1f2 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/ibm_job.md @@ -0,0 +1,46 @@ +--- +title: job +description: API reference for qiskit_ibm_provider.job +in_page_toc_min_heading_level: 1 +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.7/ibm_jupyter.md b/docs/api/qiskit-ibm-provider/0.7/ibm_jupyter.md new file mode 100644 index 00000000000..fe547c51f79 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/ibm_jupyter.md @@ -0,0 +1,57 @@ +--- +title: jupyter +description: API reference for qiskit_ibm_provider.jupyter +in_page_toc_min_heading_level: 1 +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.7/ibm_provider.md b/docs/api/qiskit-ibm-provider/0.7/ibm_provider.md new file mode 100644 index 00000000000..821e27fcd37 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/ibm_provider.md @@ -0,0 +1,66 @@ +--- +title: qiskit_ibm_provider +description: API reference for qiskit_ibm_provider +in_page_toc_min_heading_level: 1 +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]) | 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.7/ibm_transpiler.md b/docs/api/qiskit-ibm-provider/0.7/ibm_transpiler.md new file mode 100644 index 00000000000..867f5982f15 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/ibm_transpiler.md @@ -0,0 +1,28 @@ +--- +title: transpiler +description: API reference for qiskit_ibm_provider.transpiler +in_page_toc_min_heading_level: 1 +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.7/ibm_utils.md b/docs/api/qiskit-ibm-provider/0.7/ibm_utils.md new file mode 100644 index 00000000000..261e7975f71 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/ibm_utils.md @@ -0,0 +1,36 @@ +--- +title: utils +description: API reference for qiskit_ibm_provider.utils +in_page_toc_min_heading_level: 1 +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. | + diff --git a/docs/api/qiskit-ibm-provider/0.7/ibm_visualization.md b/docs/api/qiskit-ibm-provider/0.7/ibm_visualization.md new file mode 100644 index 00000000000..211eae7cb80 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/ibm_visualization.md @@ -0,0 +1,35 @@ +--- +title: visualization +description: API reference for qiskit_ibm_provider.visualization +in_page_toc_min_heading_level: 1 +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.7/index.md b/docs/api/qiskit-ibm-provider/0.7/index.md new file mode 100644 index 00000000000..fd5f3e44452 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/index.md @@ -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.7/qiskit_ibm_provider.IBMBackend.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackend.md new file mode 100644 index 00000000000..9ffaf345302 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackend.md @@ -0,0 +1,740 @@ +--- +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 + + + +`IBMBackend(configuration, provider, api_client, instance=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 v0.45)") 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 v0.45)") 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 v0.45)") 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 v0.45)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.45)")]) – 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 + + + +### 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. + + + +### coupling\_map + +Return the [`CouplingMap`](/api/qiskit/qiskit.transpiler.CouplingMap "(in Qiskit v0.45)") object + + + +### description + +Optional human-readable description. + + + +### dt + + + +`float | None` + +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 + + + +`float` + +Return the system time resolution of output signals :returns: The output signal timestep in seconds. :rtype: dtm + + + +### id\_warning\_issued + + + +`= False` + + + +### instruction\_durations + +Return the [`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.45)") object. + + + +### instruction\_schedule\_map + +Return the [`InstructionScheduleMap`](/api/qiskit/qiskit.pulse.InstructionScheduleMap "(in Qiskit v0.45)") for the instructions defined in this backend’s target. + + + +### instructions + + + +`List[Tuple[Instruction, Tuple[int]]]` + +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 v0.45)"), `Tuple`\[`int`]]] + + + +### max\_circuits + + + +`int` + +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 + + + +`List[List[int]]` + +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 + + + +### name + +Name of the backend. + + + +### num\_qubits + + + +`int` + +Return the number of qubits the backend has. + +**Return type** + +`int` + + + +### online\_date + +Date that the backend came online. + + + +### operation\_names + + + +`List[str]` + +A list of instruction names that the backend supports. + +**Return type** + +`List`\[`str`] + + + +### operations + + + +`List[Instruction]` + +A list of [`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.45)") instances that the backend supports. + +**Return type** + +`List`\[[`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.45)")] + + + +### 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 + + + +`Session` + +Return session + +**Return type** + +[`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") + + + +### target + + + +`Target` + +A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") :returns: Target + + + +### version + + + +`= 2` + +## Methods + + + +### acquire\_channel + + + +`IBMBackend.acquire_channel(qubit)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Return the acquisition channel for the given qubit. + +**Returns** + +The Qubit measurement acquisition line. + +**Return type** + +AcquireChannel + + + +### cancel\_session + + + +`IBMBackend.cancel_session()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Cancel session. All pending jobs will be cancelled. + +**Return type** + +`None` + + + +### close\_session + + + +`IBMBackend.close_session()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 + + + +`IBMBackend.configuration()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 v0.45)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.45)")] + +**Returns** + +The configuration for the backend. + + + +### control\_channel + + + +`IBMBackend.control_channel(qubits)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 + + + +`IBMBackend.defaults(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 v0.45)")] + +**Returns** + +The backend pulse defaults or `None` if the backend does not support pulse. + + + +### drive\_channel + + + +`IBMBackend.drive_channel(qubit)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Return the drive channel for the given qubit. + +**Returns** + +The Qubit drive channel + +**Return type** + +DriveChannel + + + +### get\_translation\_stage\_plugin + + + +`classmethod IBMBackend.get_translation_stage_plugin()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Return the default translation stage plugin name for IBM backends. + +**Return type** + +`str` + + + +### measure\_channel + + + +`IBMBackend.measure_channel(qubit)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Return the measure stimulus channel for the given qubit. + +**Returns** + +The Qubit measurement stimulus line + +**Return type** + +MeasureChannel + + + +### open\_session + + + +`IBMBackend.open_session(max_time=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Open session + +**Return type** + +[`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") + + + +### properties + + + +`IBMBackend.properties(refresh=False, datetime=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 v0.45)") whose timestamp is closest to, but older than, the specified datetime. + +**Return type** + +`Optional`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)")] + +**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 + + + +`IBMBackend.qubit_properties(qubit)` + +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 v0.45)"), `List`\[[`QubitProperties`](/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v0.45)")]] + +**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 + + + +`IBMBackend.run(circuits, dynamic=None, job_tags=None, init_circuit=None, init_num_resets=None, header=None, shots=None, memory=None, meas_level=None, meas_return=None, rep_delay=None, init_qubits=None, use_measure_esp=None, noise_model=None, seed_simulator=None, **run_config)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 v0.45)"), `str`, `List`\[`Union`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)"), `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 v0.45)")]) – 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 + + + +`IBMBackend.set_options(**fields)` + +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 + + + +`IBMBackend.status()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +Return the backend status. + + + If the returned [`BackendStatus`](/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v0.45)") 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 v0.45)") + +**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 + + + +`IBMBackend.target_history(datetime=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") + +A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") :returns: Target with properties found on datetime + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiError.md new file mode 100644 index 00000000000..ddd9eca9b94 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Errors that occur unexpectedly when querying the server. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiProtocolError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiProtocolError.md new file mode 100644 index 00000000000..d9a8a383a71 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendApiProtocolError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendApiProtocolError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Errors raised when an unexpected value is received from the server. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendError.md new file mode 100644 index 00000000000..6bf6c75d7bc --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Base class for errors raised by the backend modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendService.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendService.md new file mode 100644 index 00000000000..eb0da84b790 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendService.md @@ -0,0 +1,174 @@ +--- +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 + + + +`IBMBackendService(provider, hgp)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") + +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 + + + +`IBMBackendService.backends(name=None, filters=None, min_num_qubits=None, instance=None, dynamic_circuits=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") + +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 \<[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 + + + +`IBMBackendService.jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") + +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 v0.45)"), `str`]], [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.45)"), `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 + + + +`IBMBackendService.retrieve_job(job_id)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") + +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.7/qiskit_ibm_provider.IBMBackendValueError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendValueError.md new file mode 100644 index 00000000000..6b07b48b586 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMBackendValueError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Value errors raised by the backend modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMError.md new file mode 100644 index 00000000000..599a5995d4d --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Base class for errors raised by the provider modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProvider.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProvider.md new file mode 100644 index 00000000000..8dc31ed2c4a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProvider.md @@ -0,0 +1,386 @@ +--- +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 + + + +`IBMProvider(token=None, url=None, name=None, instance=None, proxies=None, verify=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`IBMBackendService` + +Return the backend service. + +**Return type** + +[`IBMBackendService`](qiskit_ibm_provider.IBMBackendService "qiskit_ibm_provider.ibm_backend_service.IBMBackendService") + +**Returns** + +The backend service instance. + + + +### version + + + +`= 1` + +## Methods + + + +### active\_account + + + +`IBMProvider.active_account()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`IBMProvider.backends(name=None, filters=None, min_num_qubits=None, instance=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 \<[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 + + + +`static IBMProvider.delete_account(name=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`IBMProvider.get_backend(name=None, instance=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`IBMProvider.instances()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`IBMProvider.jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`IBMProvider.retrieve_job(job_id)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`static IBMProvider.save_account(token=None, url=None, instance=None, name=None, proxies=None, verify=None, overwrite=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + + + +`static IBMProvider.saved_accounts(default=None, name=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") + +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.7/qiskit_ibm_provider.IBMProviderError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderError.md new file mode 100644 index 00000000000..4596e657c77 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMProviderError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Base class for errors raise by IBMProvider. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderValueError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderValueError.md new file mode 100644 index 00000000000..01ec53a02c3 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.IBMProviderValueError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMProviderValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") + +Value errors raised by IBMProvider. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.Session.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.Session.md new file mode 100644 index 00000000000..cad08074f63 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.Session.md @@ -0,0 +1,109 @@ +--- +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 + + + +`Session(max_time=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/session.py "view source code") + +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: + +```python +from qiskit.test.reference_circuits import ReferenceCircuits +from qiskit_ibm_provider import IBMProvider + +circ = ReferenceCircuits.bell() +backend = IBMProvider().get_backend("ibmq_qasm_simulator") +backend.open_session() +job = backend.run(circ) +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(ReferenceCircuits.bell()) + 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](https://qiskit.org/documentation/partners/qiskit_ibm_runtime/faqs/max_execution_time.html). + +**Raises** + +**ValueError** – If an input value is invalid. + +## Attributes + + + +### active + + + +`bool` + +Return the status of the session. + +**Return type** + +`bool` + +**Returns** + +True if the session is active, False otherwise. + + + +### session\_id + + + +`str` + +Return the session ID. + +**Return type** + +`str` + +**Returns** + +Session ID. None until a job runs in the session. + +## Methods + + + +### cancel + + + +`Session.cancel()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/session.py "view source code") + +Set the session.\_active status to False + +**Return type** + +`None` + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCircuitJob.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCircuitJob.md new file mode 100644 index 00000000000..14289b35968 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCircuitJob.md @@ -0,0 +1,675 @@ +--- +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 + + + +`IBMCircuitJob(backend, api_client, job_id, creation_date=None, status=None, runtime_client=None, kind=None, name=None, time_per_step=None, result=None, error=None, session_id=None, tags=None, run_mode=None, client_info=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 v0.45)") 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 + + + +`Dict[str, str]` + +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 + + + +`Dict[str, Any]` + +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 + + + +`= 1` + +## Methods + + + +### backend + + + +`IBMCircuitJob.backend()` + +Return the backend where this job was executed. + +**Return type** + +[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") + + + +### backend\_options + + + +`IBMCircuitJob.backend_options()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.cancel()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.cancelled()` + +Return whether the job has been cancelled. + +**Return type** + +`bool` + + + +### circuits + + + +`IBMCircuitJob.circuits()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +Return the circuits for this job. + +**Return type** + +`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)")] + +**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 + + + +`IBMCircuitJob.creation_date()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +Return job creation date, in local time. + +**Return type** + +`datetime` + +**Returns** + +The job creation date as a datetime object, in local time. + + + +### done + + + +`IBMCircuitJob.done()` + +Return whether the job has successfully run. + +**Return type** + +`bool` + + + +### error\_message + + + +`IBMCircuitJob.error_message()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +Provide details about the reason of failure. + +**Return type** + +`Optional`\[`str`] + +**Returns** + +An error report if the job failed or `None` otherwise. + + + +### header + + + +`IBMCircuitJob.header()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.in_final_state()` + +Return whether the job is in a final job state such as `DONE` or `ERROR`. + +**Return type** + +`bool` + + + +### job\_id + + + +`IBMCircuitJob.job_id()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +Return the job ID assigned by the server. + +**Return type** + +`str` + +**Returns** + +Job ID. + + + +### name + + + +`IBMCircuitJob.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 + + + +`IBMCircuitJob.properties(refresh=False)` + +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 v0.45)")] + +**Returns** + +The backend properties used for this job, at the time the job was run, or `None` if properties are not available. + + + +### queue\_info + + + +`IBMCircuitJob.queue_info()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.queue_position(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.refresh()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.result(timeout=None, refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 v0.45)") 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 v0.45)") + +**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 + + + +`IBMCircuitJob.running()` + +Return whether the job is actively running. + +**Return type** + +`bool` + + + +### scheduling\_mode + + + +`IBMCircuitJob.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 + + + +`IBMCircuitJob.status()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 v0.45)") + +**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 + + + +`IBMCircuitJob.submit()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +Unsupported method. + + + This method is not supported, please use `run()` to submit a job. + + +**Raises** + +**NotImplementedError** – Upon invocation. + +**Return type** + +`None` + + + +### tags + + + +`IBMCircuitJob.tags()` + +Return the tags assigned to this job. + +**Return type** + +`List`\[`str`] + +**Returns** + +Tags assigned to this job. + + + +### time\_per\_step + + + +`IBMCircuitJob.time_per_step()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.update_name(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 + + + +`IBMCircuitJob.update_tags(new_tags)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 + + + +`IBMCircuitJob.wait_for_final_state(timeout=None, wait=3)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +#### 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.7/qiskit_ibm_provider.job.IBMCompositeJob.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCompositeJob.md new file mode 100644 index 00000000000..ad499371585 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMCompositeJob.md @@ -0,0 +1,823 @@ +--- +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 + + + +`IBMCompositeJob(backend, api_client, job_id=None, creation_date=None, jobs=None, circuits_list=None, run_config=None, name=None, tags=None, client_version=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 v0.45)")]]]) – 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 + + + +`Dict[str, str]` + +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 + + + +`= 1` + +## Methods + + + +### backend + + + +`IBMCompositeJob.backend()` + +Return the backend where this job was executed. + +**Return type** + +[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") + + + +### backend\_options + + + +`IBMCompositeJob.backend_options()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.block_for_submit()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +Block until all sub-jobs are submitted. + +**Return type** + +`None` + + + +### cancel + + + +`IBMCompositeJob.cancel()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.cancelled()` + +Return whether the job has been cancelled. + +**Return type** + +`bool` + + + +### circuits + + + +`IBMCompositeJob.circuits()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +Return the circuits for this job. + +**Return type** + +`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)")] + +**Returns** + +The circuits for this job. + + + +### creation\_date + + + +`IBMCompositeJob.creation_date()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.done()` + +Return whether the job has successfully run. + +**Return type** + +`bool` + + + +### error\_message + + + +`IBMCompositeJob.error_message()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`classmethod IBMCompositeJob.from_jobs(job_id, jobs, api_client)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.header()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.in_final_state()` + +Return whether the job is in a final job state such as `DONE` or `ERROR`. + +**Return type** + +`bool` + + + +### job\_id + + + +`IBMCompositeJob.job_id()` + +Return a unique id identifying the job. + +**Return type** + +`str` + + + +### name + + + +`IBMCompositeJob.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 + + + +`IBMCompositeJob.properties(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 v0.45)")], [`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)"), `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 + + + +`IBMCompositeJob.queue_info()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.queue_position(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.refresh()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.report(detailed=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.rerun_failed()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.result(timeout=None, wait=5, partial=False, refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 v0.45)") 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 v0.45)") + +**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 + + + +`IBMCompositeJob.running()` + +Return whether the job is actively running. + +**Return type** + +`bool` + + + +### scheduling\_mode + + + +`IBMCompositeJob.scheduling_mode()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.status()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 v0.45)") + +**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 + + + +`IBMCompositeJob.sub_job(circuit_index)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.sub_jobs(block_for_submit=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.submit()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +Unsupported method. + + + This method is not supported, please use `run()` to submit a job. + + +**Raises** + +**NotImplementedError** – Upon invocation. + +**Return type** + +`None` + + + +### tags + + + +`IBMCompositeJob.tags()` + +Return the tags assigned to this job. + +**Return type** + +`List`\[`str`] + +**Returns** + +Tags assigned to this job. + + + +### time\_per\_step + + + +`IBMCompositeJob.time_per_step()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.update_name(name)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.update_tags(new_tags)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 + + + +`IBMCompositeJob.wait_for_final_state(timeout=None, wait=None, callback=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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.7/qiskit_ibm_provider.job.IBMJobApiError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobApiError.md new file mode 100644 index 00000000000..a00247d081e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobApiError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") + +Errors that occur unexpectedly when querying the server. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobError.md new file mode 100644 index 00000000000..0db698eca26 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") + +Base class for errors raised by the job modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobFailureError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobFailureError.md new file mode 100644 index 00000000000..6a29845ffd0 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobFailureError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobFailureError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") + +Errors raised when a job failed. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobInvalidStateError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobInvalidStateError.md new file mode 100644 index 00000000000..53e1d94f7a8 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobInvalidStateError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobInvalidStateError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") + +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.7/qiskit_ibm_provider.job.IBMJobTimeoutError.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobTimeoutError.md new file mode 100644 index 00000000000..921539f26b0 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.IBMJobTimeoutError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobTimeoutError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") + +Errors raised when a job operation times out. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.QueueInfo.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.QueueInfo.md new file mode 100644 index 00000000000..bee21730319 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.QueueInfo.md @@ -0,0 +1,80 @@ +--- +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 + + + +`QueueInfo(position_in_queue=None, status=None, estimated_start_time=None, estimated_completion_time=None, hub_priority=None, group_priority=None, project_priority=None, job_id=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/queueinfo.py "view source code") + +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 + + + +`datetime | None` + +Return estimated complete time in local time. + +**Return type** + +`Optional`\[`datetime`] + + + +### estimated\_start\_time + + + +`datetime | None` + +Return estimated start time in local time. + +**Return type** + +`Optional`\[`datetime`] + +## Methods + + + +### format + + + +`QueueInfo.format()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/queueinfo.py "view source code") + +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.7/qiskit_ibm_provider.job.job_monitor.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.job_monitor.md new file mode 100644 index 00000000000..c5dbc48f0e4 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.job.job_monitor.md @@ -0,0 +1,28 @@ +--- +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 + + + +`job_monitor(job, interval=None, output=<_io.TextIOWrapper name='' mode='w' encoding='utf-8'>)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/job_monitor.py "view source code") + +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.7/qiskit_ibm_provider.least_busy.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.least_busy.md new file mode 100644 index 00000000000..3db875f86b3 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.least_busy.md @@ -0,0 +1,36 @@ +--- +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 + + + +`least_busy(backends)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/__init__.py "view source code") + +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 v0.45)")]) – The backends to choose from. + +**Return type** + +[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") + +**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.7/qiskit_ibm_provider.transpiler.passes.basis.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.basis.md new file mode 100644 index 00000000000..6a790464c9e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.basis.md @@ -0,0 +1,22 @@ +--- +title: basis +description: API reference for qiskit_ibm_provider.transpiler.passes.basis +in_page_toc_min_heading_level: 1 +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.7/qiskit_ibm_provider.transpiler.passes.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.md new file mode 100644 index 00000000000..6bdf3a06a94 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.md @@ -0,0 +1,27 @@ +--- +title: passes +description: API reference for qiskit_ibm_provider.transpiler.passes +in_page_toc_min_heading_level: 1 +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.7/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md new file mode 100644 index 00000000000..e1c2959ff71 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md @@ -0,0 +1,163 @@ +--- +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 + + + +`ALAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") + +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 v0.45)")) – 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\_\_ + + + +`ALAPScheduleAnalysis.__call__(circuit, property_set=None)` + +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 + + + +`ALAPScheduleAnalysis.execute(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + + + +### name + + + +`ALAPScheduleAnalysis.name()` + +Name of the pass. + +**Return type** + +`str` + + + +### run + + + +`ALAPScheduleAnalysis.run(dag)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") + +Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") :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 + + + +`ALAPScheduleAnalysis.update_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md new file mode 100644 index 00000000000..8f57c9c4540 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md @@ -0,0 +1,163 @@ +--- +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 + + + +`ASAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") + +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 v0.45)")) – 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\_\_ + + + +`ASAPScheduleAnalysis.__call__(circuit, property_set=None)` + +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 + + + +`ASAPScheduleAnalysis.execute(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + + + +### name + + + +`ASAPScheduleAnalysis.name()` + +Name of the pass. + +**Return type** + +`str` + + + +### run + + + +`ASAPScheduleAnalysis.run(dag)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") + +Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") :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 v0.45)") + +**Returns** + +The scheduled DAGCircuit. + + + +### update\_status + + + +`ASAPScheduleAnalysis.update_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md new file mode 100644 index 00000000000..404b940b8f6 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md @@ -0,0 +1,157 @@ +--- +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 + + + +`BlockBasePadder(schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/block_base_padder.py "view source code") + +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\_\_ + + + +`BlockBasePadder.__call__(circuit, property_set=None)` + +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 + + + +`BlockBasePadder.execute(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + + + +### name + + + +`BlockBasePadder.name()` + +Name of the pass. + +**Return type** + +`str` + + + +### run + + + +`BlockBasePadder.run(dag)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/block_base_padder.py "view source code") + +Run the padding pass on `dag`. + +**Parameters** + +**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – 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 + + + +`BlockBasePadder.update_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md new file mode 100644 index 00000000000..99ea8ed5b11 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md @@ -0,0 +1,140 @@ +--- +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 + + + +`DynamicCircuitInstructionDurations(instruction_durations=None, dt=None, enable_patching=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/utils.py "view source code") + +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 + + + +`= 160` + + + +### MEASURE\_PATCH\_ODD\_OFFSET + + + +`= 64` + +## Methods + + + +### from\_backend + + + +`classmethod DynamicCircuitInstructionDurations.from_backend(backend)` + +Construct an `InstructionDurations` object from the backend. + +**Parameters** + +**backend** ([`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)")) – backend from which durations (gate lengths) and dt are extracted. + +**Returns** + +The InstructionDurations constructed from backend. + +**Return type** + +InstructionDurations + +**Raises** + +**TranspilerError** – If dt and dtm is different in the backend. + + + +### get + + + +`DynamicCircuitInstructionDurations.get(inst, qubits, unit='dt', parameters=None)` + +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 v0.45)")) – 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 + + + +`DynamicCircuitInstructionDurations.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 + + + +`DynamicCircuitInstructionDurations.update(inst_durations, dt=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/utils.py "view source code") + +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 v0.45)"), `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.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md new file mode 100644 index 00000000000..435234bc4ab --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md @@ -0,0 +1,169 @@ +--- +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 + + + +`PadDelay(fill_very_end=True, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/pad_delay.py "view source code") + +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\_\_ + + + +`PadDelay.__call__(circuit, property_set=None)` + +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 + + + +`PadDelay.execute(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + + + +### name + + + +`PadDelay.name()` + +Name of the pass. + +**Return type** + +`str` + + + +### run + + + +`PadDelay.run(dag)` + +Run the padding pass on `dag`. + +**Parameters** + +**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – 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 + + + +`PadDelay.update_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md new file mode 100644 index 00000000000..d2793235276 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md @@ -0,0 +1,304 @@ +--- +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 + + + +`PadDynamicalDecoupling(durations, dd_sequences, qubits=None, spacings=None, skip_reset_qubits=True, pulse_alignment=16, extra_slack_distribution='middle', sequence_min_length_ratios=None, insert_multiple_cycles=False, coupling_map=None, alt_spacings=None, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/dynamical_decoupling.py "view source code") + +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 v0.45)")) – Durations of instructions to be used in scheduling. + +* **dd\_sequences** (`Union`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.45)")], `List`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.45)")]]]) – 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 v0.45)")]) – 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\_\_ + + + +`PadDynamicalDecoupling.__call__(circuit, property_set=None)` + +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 + + + +`PadDynamicalDecoupling.execute(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + + + +### name + + + +`PadDynamicalDecoupling.name()` + +Name of the pass. + +**Return type** + +`str` + + + +### run + + + +`PadDynamicalDecoupling.run(dag)` + +Run the padding pass on `dag`. + +**Parameters** + +**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – 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 + + + +`PadDynamicalDecoupling.update_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.md new file mode 100644 index 00000000000..345461c044c --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling.md @@ -0,0 +1,381 @@ +--- +title: scheduling +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling +in_page_toc_min_heading_level: 1 +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 v0.45)") or [`generate_preset_pass_manager()`](/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v0.45)"). + + +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 +from qiskit.providers.fake_provider import FakeJakarta + + +backend = FakeJakarta() + +# 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\_0\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_0_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\_1\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_1_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 v0.45)") 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 v0.45)"). This returns instances of [`StagedPassManager`](/api/qiskit/qiskit.transpiler.StagedPassManager "(in Qiskit v0.45)"), 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\_2\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_2_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 v0.45)"). 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\_3\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_3_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 v0.45)") 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\_4\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_4_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\_5\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_5_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\_6\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_6_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\_7\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_7_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\_8\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_8_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\_9\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_9_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\_10\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_10_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\_11\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_11_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\_12\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_12_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\_13\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_13_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\_14\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_14_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\_15\_0.png](/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_15_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.7/qiskit_ibm_provider.utils.seconds_to_duration.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.seconds_to_duration.md new file mode 100644 index 00000000000..dc8305df66c --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.seconds_to_duration.md @@ -0,0 +1,30 @@ +--- +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 + + + +`seconds_to_duration(seconds)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/converters.py "view source code") + +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.7/qiskit_ibm_provider.utils.to_python_identifier.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.to_python_identifier.md new file mode 100644 index 00000000000..d30697dc36d --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.to_python_identifier.md @@ -0,0 +1,30 @@ +--- +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 + + + +`to_python_identifier(name)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/utils.py "view source code") + +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.7/qiskit_ibm_provider.utils.utc_to_local.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.utc_to_local.md new file mode 100644 index 00000000000..5da694da13c --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.utc_to_local.md @@ -0,0 +1,34 @@ +--- +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 + + + +`utc_to_local(utc_dt)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/converters.py "view source code") + +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.7/qiskit_ibm_provider.utils.validate_job_tags.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.validate_job_tags.md new file mode 100644 index 00000000000..a9254617954 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.utils.validate_job_tags.md @@ -0,0 +1,31 @@ +--- +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 + + + +`validate_job_tags(job_tags, exception)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/utils.py "view source code") + +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.7/qiskit_ibm_provider.visualization.iplot_error_map.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_error_map.md new file mode 100644 index 00000000000..f038a764762 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_error_map.md @@ -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 + + + +`iplot_error_map(backend, figsize=(800, 500), show_title=True, remove_badcal_edges=True, background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/visualization/interactive/error_map.py "view source code") + +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') +backend = provider.get_backend('ibmq_vigo') + +iplot_error_map(backend, as_widget=True) +``` + diff --git a/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_gate_map.md b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_gate_map.md new file mode 100644 index 00000000000..90b83947e11 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.visualization.iplot_gate_map.md @@ -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 + + + +`iplot_gate_map(backend, figsize=(None, None), label_qubits=True, qubit_size=None, line_width=None, font_size=None, qubit_color='#2f4b7c', qubit_labels=None, line_color='#2f4b7c', font_color='white', background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/visualization/interactive/gate_map.py "view source code") + +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') +backend = provider.get_backend('ibmq_vigo') + +iplot_gate_map(backend, as_widget=True) +``` + diff --git a/docs/api/qiskit-ibm-provider/0.8/_package.json b/docs/api/qiskit-ibm-provider/0.8/_package.json new file mode 100644 index 00000000000..cdc01e06a1b --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/_package.json @@ -0,0 +1,4 @@ +{ + "name": "qiskit-ibm-provider", + "version": "0.8.0" +} diff --git a/docs/api/qiskit-ibm-provider/0.8/_toc.json b/docs/api/qiskit-ibm-provider/0.8/_toc.json new file mode 100644 index 00000000000..3d3cac474aa --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/_toc.json @@ -0,0 +1,213 @@ +{ + "title": "Qiskit IBM Provider", + "children": [ + { + "title": "qiskit_ibm_provider", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/ibm_provider" + }, + { + "title": "IBMBackend", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackend" + }, + { + "title": "IBMBackendApiError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiError" + }, + { + "title": "IBMBackendApiProtocolError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiProtocolError" + }, + { + "title": "IBMBackendError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendError" + }, + { + "title": "IBMBackendService", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendService" + }, + { + "title": "IBMBackendValueError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendValueError" + }, + { + "title": "IBMError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMError" + }, + { + "title": "IBMProvider", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProvider" + }, + { + "title": "IBMProviderError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderError" + }, + { + "title": "IBMProviderValueError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderValueError" + }, + { + "title": "least_busy", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.least_busy" + }, + { + "title": "Session", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.Session" + } + ] + }, + { + "title": "qiskit_ibm_provider.job", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/ibm_job" + }, + { + "title": "IBMCircuitJob", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCircuitJob" + }, + { + "title": "IBMCompositeJob", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCompositeJob" + }, + { + "title": "IBMJobApiError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobApiError" + }, + { + "title": "IBMJobError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobError" + }, + { + "title": "IBMJobFailureError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobFailureError" + }, + { + "title": "IBMJobInvalidStateError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobInvalidStateError" + }, + { + "title": "IBMJobTimeoutError", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobTimeoutError" + }, + { + "title": "job_monitor", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.job_monitor" + }, + { + "title": "QueueInfo", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.QueueInfo" + } + ] + }, + { + "title": "qiskit_ibm_provider.jupyter", + "url": "/api/qiskit-ibm-provider/0.8/ibm_jupyter" + }, + { + "title": "qiskit_ibm_provider.transpiler", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/ibm_transpiler" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes.basis", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.basis" + }, + { + "title": "qiskit_ibm_provider.transpiler.passes.scheduling", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling" + }, + { + "title": "ALAPScheduleAnalysis", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis" + }, + { + "title": "ASAPScheduleAnalysis", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis" + }, + { + "title": "BlockBasePadder", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder" + }, + { + "title": "DynamicCircuitInstructionDurations", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations" + }, + { + "title": "PadDelay", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay" + }, + { + "title": "PadDynamicalDecoupling", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling" + } + ] + } + ] + } + ] + }, + { + "title": "qiskit_ibm_provider.utils", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/ibm_utils" + }, + { + "title": "seconds_to_duration", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.seconds_to_duration" + }, + { + "title": "to_python_identifier", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.to_python_identifier" + }, + { + "title": "utc_to_local", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.utc_to_local" + }, + { + "title": "validate_job_tags", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.validate_job_tags" + } + ] + }, + { + "title": "qiskit_ibm_provider.visualization", + "children": [ + { + "title": "Overview", + "url": "/api/qiskit-ibm-provider/0.8/ibm_visualization" + }, + { + "title": "iplot_error_map", + "url": "/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_error_map" + }, + { + "title": "iplot_gate_map", + "url": "/api/qiskit-ibm-provider/0.8/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.8/ibm_job.md b/docs/api/qiskit-ibm-provider/0.8/ibm_job.md new file mode 100644 index 00000000000..c3aa144d1f2 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/ibm_job.md @@ -0,0 +1,46 @@ +--- +title: job +description: API reference for qiskit_ibm_provider.job +in_page_toc_min_heading_level: 1 +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.8/ibm_jupyter.md b/docs/api/qiskit-ibm-provider/0.8/ibm_jupyter.md new file mode 100644 index 00000000000..fe547c51f79 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/ibm_jupyter.md @@ -0,0 +1,57 @@ +--- +title: jupyter +description: API reference for qiskit_ibm_provider.jupyter +in_page_toc_min_heading_level: 1 +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.8/ibm_provider.md b/docs/api/qiskit-ibm-provider/0.8/ibm_provider.md new file mode 100644 index 00000000000..821e27fcd37 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/ibm_provider.md @@ -0,0 +1,66 @@ +--- +title: qiskit_ibm_provider +description: API reference for qiskit_ibm_provider +in_page_toc_min_heading_level: 1 +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]) | 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.8/ibm_transpiler.md b/docs/api/qiskit-ibm-provider/0.8/ibm_transpiler.md new file mode 100644 index 00000000000..867f5982f15 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/ibm_transpiler.md @@ -0,0 +1,28 @@ +--- +title: transpiler +description: API reference for qiskit_ibm_provider.transpiler +in_page_toc_min_heading_level: 1 +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.8/ibm_utils.md b/docs/api/qiskit-ibm-provider/0.8/ibm_utils.md new file mode 100644 index 00000000000..261e7975f71 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/ibm_utils.md @@ -0,0 +1,36 @@ +--- +title: utils +description: API reference for qiskit_ibm_provider.utils +in_page_toc_min_heading_level: 1 +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. | + diff --git a/docs/api/qiskit-ibm-provider/0.8/ibm_visualization.md b/docs/api/qiskit-ibm-provider/0.8/ibm_visualization.md new file mode 100644 index 00000000000..211eae7cb80 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/ibm_visualization.md @@ -0,0 +1,35 @@ +--- +title: visualization +description: API reference for qiskit_ibm_provider.visualization +in_page_toc_min_heading_level: 1 +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.8/index.md b/docs/api/qiskit-ibm-provider/0.8/index.md new file mode 100644 index 00000000000..fd5f3e44452 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/index.md @@ -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.8/qiskit_ibm_provider.IBMBackend.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackend.md new file mode 100644 index 00000000000..5b8643dc3dd --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackend.md @@ -0,0 +1,664 @@ +--- +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 + + + +`IBMBackend(configuration, provider, api_client, instance=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/ibm_backend.py "view source code") + +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 v0.45)") 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 v0.45)") 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 v0.45)") 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 v0.45)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.45)")]) – 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 v0.45)") 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 + +`= False` + + + +### instruction\_durations + +Return the [`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.45)") object. + + + +### instruction\_schedule\_map + +Return the [`InstructionScheduleMap`](/api/qiskit/qiskit.pulse.InstructionScheduleMap "(in Qiskit v0.45)") 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 v0.45)"), `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 v0.45)") instances that the backend supports. + +**Return type** + +`List`\[[`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.45)")] + + + +### 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 v0.45)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") :returns: Target + + + +### version + +`= 2` + + + +### 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 + + + +`acquire_channel(qubit)` + +Return the acquisition channel for the given qubit. + +**Returns** + +The Qubit measurement acquisition line. + +**Return type** + +AcquireChannel + +### cancel\_session + + + +`cancel_session()` + +Cancel session. All pending jobs will be cancelled. + +**Return type** + +`None` + +### close\_session + + + +`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 + + + +`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 v0.45)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.45)")] + +**Returns** + +The configuration for the backend. + +### control\_channel + + + +`control_channel(qubits)` + +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 + + + +`defaults(refresh=False)` + +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 v0.45)")] + +**Returns** + +The backend pulse defaults or `None` if the backend does not support pulse. + +### drive\_channel + + + +`drive_channel(qubit)` + +Return the drive channel for the given qubit. + +**Returns** + +The Qubit drive channel + +**Return type** + +DriveChannel + +### get\_translation\_stage\_plugin + + + +`classmethod get_translation_stage_plugin()` + +Return the default translation stage plugin name for IBM backends. + +**Return type** + +`str` + +### measure\_channel + + + +`measure_channel(qubit)` + +Return the measure stimulus channel for the given qubit. + +**Returns** + +The Qubit measurement stimulus line + +**Return type** + +MeasureChannel + +### open\_session + + + +`open_session(max_time=None)` + +Open session + +**Return type** + +[`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") + +### properties + + + +`properties(refresh=False, datetime=None)` + +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 v0.45)") whose timestamp is closest to, but older than, the specified datetime. + +**Return type** + +`Optional`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)")] + +**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 + + + +`qubit_properties(qubit)` + +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 v0.45)"), `List`\[[`QubitProperties`](/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v0.45)")]] + +**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(circuits, dynamic=None, job_tags=None, init_circuit=None, init_num_resets=None, header=None, shots=None, memory=None, meas_level=None, meas_return=None, rep_delay=None, init_qubits=None, use_measure_esp=None, noise_model=None, seed_simulator=None, **run_config)` + +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 v0.45)"), `str`, `List`\[`Union`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)"), `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 v0.45)")]) – 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_options(**fields)` + +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 + + + +`status()` + +Return the backend status. + + + If the returned [`BackendStatus`](/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v0.45)") 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 v0.45)") + +**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 + + + +`target_history(datetime=None)` + +A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") :returns: Target with properties found on datetime + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiError.md new file mode 100644 index 00000000000..e3273eaa647 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Errors that occur unexpectedly when querying the server. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiProtocolError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiProtocolError.md new file mode 100644 index 00000000000..c9d5173b594 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendApiProtocolError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendApiProtocolError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Errors raised when an unexpected value is received from the server. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendError.md new file mode 100644 index 00000000000..39e5202c6c4 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Base class for errors raised by the backend modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendService.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendService.md new file mode 100644 index 00000000000..8a16b126f4a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendService.md @@ -0,0 +1,168 @@ +--- +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 + + + +`IBMBackendService(provider, hgp)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/ibm_backend_service.py "view source code") + +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 + + + +`backends(name=None, filters=None, min_num_qubits=None, instance=None, dynamic_circuits=None, **kwargs)` + +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 \<[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 + + + +`jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)` + +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 v0.45)"), `str`]], [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.45)"), `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 + + + +`retrieve_job(job_id)` + +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.8/qiskit_ibm_provider.IBMBackendValueError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendValueError.md new file mode 100644 index 00000000000..99884277f95 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMBackendValueError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMBackendValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Value errors raised by the backend modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMError.md new file mode 100644 index 00000000000..fc152277898 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Base class for errors raised by the provider modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProvider.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProvider.md new file mode 100644 index 00000000000..da0f7ba0274 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProvider.md @@ -0,0 +1,362 @@ +--- +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 + + + +`IBMProvider(token=None, url=None, name=None, instance=None, proxies=None, verify=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/ibm_provider.py "view source code") + +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 + +`= 1` + +## Methods + +### active\_account + + + +`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 + + + +`backends(name=None, filters=None, min_num_qubits=None, instance=None, **kwargs)` + +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 \<[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 + + + +`static delete_account(name=None)` + +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 + + + +`get_backend(name=None, instance=None, **kwargs)` + +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 + + + +`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 + + + +`jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)` + +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 + + + +`retrieve_job(job_id)` + +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 + + + +`static save_account(token=None, url=None, instance=None, name=None, proxies=None, verify=None, overwrite=False)` + +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 + + + +`static saved_accounts(default=None, name=None)` + +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.8/qiskit_ibm_provider.IBMProviderError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderError.md new file mode 100644 index 00000000000..221d8d04435 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMProviderError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Base class for errors raise by IBMProvider. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderValueError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderValueError.md new file mode 100644 index 00000000000..0d74a62f48e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.IBMProviderValueError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMProviderValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/exceptions.py "view source code") + +Value errors raised by IBMProvider. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.Session.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.Session.md new file mode 100644 index 00000000000..8eb79a68696 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.Session.md @@ -0,0 +1,99 @@ +--- +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 + + + +`Session(max_time=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/session.py "view source code") + +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: + +```python +from qiskit.test.reference_circuits import ReferenceCircuits +from qiskit_ibm_provider import IBMProvider + +circ = ReferenceCircuits.bell() +backend = IBMProvider().get_backend("ibmq_qasm_simulator") +backend.open_session() +job = backend.run(circ) +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(ReferenceCircuits.bell()) + 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](https://qiskit.org/documentation/partners/qiskit_ibm_runtime/faqs/max_execution_time.html). + +**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 + + + +`cancel()` + +Set the session.\_active status to False + +**Return type** + +`None` + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCircuitJob.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCircuitJob.md new file mode 100644 index 00000000000..f35ab23b748 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCircuitJob.md @@ -0,0 +1,613 @@ +--- +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 + + + +`IBMCircuitJob(backend, api_client, job_id, creation_date=None, status=None, runtime_client=None, kind=None, name=None, time_per_step=None, result=None, error=None, session_id=None, tags=None, run_mode=None, client_info=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") + +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 v0.45)") 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 + +`= 1` + +## Methods + +### backend + + + +`backend()` + +Return the backend where this job was executed. + +**Return type** + +[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") + +### backend\_options + + + +`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 + + + +`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 + + + +`cancelled()` + +Return whether the job has been cancelled. + +**Return type** + +`bool` + +### circuits + + + +`circuits()` + +Return the circuits for this job. + +**Return type** + +`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)")] + +**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 + + + +`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 + + + +`done()` + +Return whether the job has successfully run. + +**Return type** + +`bool` + +### error\_message + + + +`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 + + + +`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 + + + +`in_final_state()` + +Return whether the job is in a final job state such as `DONE` or `ERROR`. + +**Return type** + +`bool` + +### job\_id + + + +`job_id()` + +Return the job ID assigned by the server. + +**Return type** + +`str` + +**Returns** + +Job ID. + +### name + + + +`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 + + + +`properties(refresh=False)` + +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 v0.45)")] + +**Returns** + +The backend properties used for this job, at the time the job was run, or `None` if properties are not available. + +### queue\_info + + + +`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 + + + +`queue_position(refresh=False)` + +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 + + + +`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 + + + +`result(timeout=None, refresh=False)` + +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 v0.45)") 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 v0.45)") + +**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 + + + +`running()` + +Return whether the job is actively running. + +**Return type** + +`bool` + +### scheduling\_mode + + + +`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 + + + +`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 v0.45)") + +**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 + + + +`submit()` + +Unsupported method. + + + This method is not supported, please use `run()` to submit a job. + + +**Raises** + +**NotImplementedError** – Upon invocation. + +**Return type** + +`None` + +### tags + + + +`tags()` + +Return the tags assigned to this job. + +**Return type** + +`List`\[`str`] + +**Returns** + +Tags assigned to this job. + +### time\_per\_step + + + +`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_name(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_tags(new_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 + + + +`wait_for_final_state(timeout=None, wait=3)` + +**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.8/qiskit_ibm_provider.job.IBMCompositeJob.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCompositeJob.md new file mode 100644 index 00000000000..011d06ad9e5 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMCompositeJob.md @@ -0,0 +1,753 @@ +--- +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 + + + +`IBMCompositeJob(backend, api_client, job_id=None, creation_date=None, jobs=None, circuits_list=None, run_config=None, name=None, tags=None, client_version=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") + +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 v0.45)")]]]) – 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 + +`= 1` + +## Methods + +### backend + + + +`backend()` + +Return the backend where this job was executed. + +**Return type** + +[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") + +### backend\_options + + + +`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_for_submit()` + +Block until all sub-jobs are submitted. + +**Return type** + +`None` + +### cancel + + + +`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 + + + +`cancelled()` + +Return whether the job has been cancelled. + +**Return type** + +`bool` + +### circuits + + + +`circuits()` + +Return the circuits for this job. + +**Return type** + +`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)")] + +**Returns** + +The circuits for this job. + +### creation\_date + + + +`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 + + + +`done()` + +Return whether the job has successfully run. + +**Return type** + +`bool` + +### error\_message + + + +`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 + + + +`classmethod from_jobs(job_id, jobs, api_client)` + +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 + + + +`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 + + + +`in_final_state()` + +Return whether the job is in a final job state such as `DONE` or `ERROR`. + +**Return type** + +`bool` + +### job\_id + + + +`job_id()` + +Return a unique id identifying the job. + +**Return type** + +`str` + +### name + + + +`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 + + + +`properties(refresh=False)` + +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 v0.45)")], [`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)"), `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 + + + +`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 + + + +`queue_position(refresh=False)` + +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 + + + +`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 + + + +`report(detailed=True)` + +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 + + + +`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 + + + +`result(timeout=None, wait=5, partial=False, refresh=False)` + +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 v0.45)") 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 v0.45)") + +**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 + + + +`running()` + +Return whether the job is actively running. + +**Return type** + +`bool` + +### scheduling\_mode + + + +`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 + + + +`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 v0.45)") + +**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 + + + +`sub_job(circuit_index)` + +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 + + + +`sub_jobs(block_for_submit=True)` + +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 + + + +`submit()` + +Unsupported method. + + + This method is not supported, please use `run()` to submit a job. + + +**Raises** + +**NotImplementedError** – Upon invocation. + +**Return type** + +`None` + +### tags + + + +`tags()` + +Return the tags assigned to this job. + +**Return type** + +`List`\[`str`] + +**Returns** + +Tags assigned to this job. + +### time\_per\_step + + + +`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_name(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_tags(new_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_for_final_state(timeout=None, wait=None, callback=None)` + +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.8/qiskit_ibm_provider.job.IBMJobApiError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobApiError.md new file mode 100644 index 00000000000..6ae8160af50 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobApiError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/exceptions.py "view source code") + +Errors that occur unexpectedly when querying the server. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobError.md new file mode 100644 index 00000000000..d22be4af676 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/exceptions.py "view source code") + +Base class for errors raised by the job modules. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobFailureError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobFailureError.md new file mode 100644 index 00000000000..7092bc907ae --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobFailureError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobFailureError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/exceptions.py "view source code") + +Errors raised when a job failed. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobInvalidStateError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobInvalidStateError.md new file mode 100644 index 00000000000..2b781424994 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobInvalidStateError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobInvalidStateError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/exceptions.py "view source code") + +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.8/qiskit_ibm_provider.job.IBMJobTimeoutError.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobTimeoutError.md new file mode 100644 index 00000000000..e8ccbc16793 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.IBMJobTimeoutError.md @@ -0,0 +1,18 @@ +--- +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 + + + +`IBMJobTimeoutError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/exceptions.py "view source code") + +Errors raised when a job operation times out. + +Set the error message. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.QueueInfo.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.QueueInfo.md new file mode 100644 index 00000000000..d3d38d1581a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.QueueInfo.md @@ -0,0 +1,70 @@ +--- +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 + + + +`QueueInfo(position_in_queue=None, status=None, estimated_start_time=None, estimated_completion_time=None, hub_priority=None, group_priority=None, project_priority=None, job_id=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/queueinfo.py "view source code") + +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 + + + +`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.8/qiskit_ibm_provider.job.job_monitor.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.job_monitor.md new file mode 100644 index 00000000000..b68fc874934 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.job.job_monitor.md @@ -0,0 +1,28 @@ +--- +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 + + + +`job_monitor(job, interval=None, output=<_io.TextIOWrapper name='' mode='w' encoding='utf-8'>)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/job/job_monitor.py "view source code") + +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.8/qiskit_ibm_provider.least_busy.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.least_busy.md new file mode 100644 index 00000000000..f608296af89 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.least_busy.md @@ -0,0 +1,36 @@ +--- +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 + + + +`least_busy(backends)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/__init__.py "view source code") + +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 v0.45)")]) – The backends to choose from. + +**Return type** + +[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") + +**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.8/qiskit_ibm_provider.transpiler.passes.basis.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.basis.md new file mode 100644 index 00000000000..6a790464c9e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.basis.md @@ -0,0 +1,22 @@ +--- +title: basis +description: API reference for qiskit_ibm_provider.transpiler.passes.basis +in_page_toc_min_heading_level: 1 +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.8/qiskit_ibm_provider.transpiler.passes.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.md new file mode 100644 index 00000000000..6bdf3a06a94 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.md @@ -0,0 +1,27 @@ +--- +title: passes +description: API reference for qiskit_ibm_provider.transpiler.passes +in_page_toc_min_heading_level: 1 +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.8/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md new file mode 100644 index 00000000000..30439be9f94 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md @@ -0,0 +1,153 @@ +--- +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 + + + +`ALAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") + +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 v0.45)")) – 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\_\_ + + + +`__call__(circuit, property_set=None)` + +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(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + +### name + + + +`name()` + +Name of the pass. + +**Return type** + +`str` + +### run + + + +`run(dag)` + +Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") :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_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md new file mode 100644 index 00000000000..cc564dc262a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md @@ -0,0 +1,153 @@ +--- +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 + + + +`ASAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") + +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 v0.45)")) – 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\_\_ + + + +`__call__(circuit, property_set=None)` + +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(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + +### name + + + +`name()` + +Name of the pass. + +**Return type** + +`str` + +### run + + + +`run(dag)` + +Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") :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 v0.45)") + +**Returns** + +The scheduled DAGCircuit. + +### update\_status + + + +`update_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md new file mode 100644 index 00000000000..022083b0050 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md @@ -0,0 +1,147 @@ +--- +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 + + + +`BlockBasePadder(schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/transpiler/passes/scheduling/block_base_padder.py "view source code") + +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\_\_ + + + +`__call__(circuit, property_set=None)` + +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(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + +### name + + + +`name()` + +Name of the pass. + +**Return type** + +`str` + +### run + + + +`run(dag)` + +Run the padding pass on `dag`. + +**Parameters** + +**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – 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_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md new file mode 100644 index 00000000000..f3fc7ec80b1 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md @@ -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 + + + +`DynamicCircuitInstructionDurations(instruction_durations=None, dt=None, enable_patching=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/transpiler/passes/scheduling/utils.py "view source code") + +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 + +`= 160` + + + +### MEASURE\_PATCH\_ODD\_OFFSET + +`= 64` + +## Methods + +### from\_backend + + + +`classmethod from_backend(backend)` + +Construct an `InstructionDurations` object from the backend. + +**Parameters** + +**backend** ([`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)")) – backend from which durations (gate lengths) and dt are extracted. + +**Returns** + +The InstructionDurations constructed from backend. + +**Return type** + +InstructionDurations + +**Raises** + +**TranspilerError** – If dt and dtm is different in the backend. + +### get + + + +`get(inst, qubits, unit='dt', parameters=None)` + +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 v0.45)")) – 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 + + + +`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(inst_durations, dt=None)` + +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 v0.45)"), `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.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md new file mode 100644 index 00000000000..b1dbd725329 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md @@ -0,0 +1,159 @@ +--- +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 + + + +`PadDelay(fill_very_end=True, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/transpiler/passes/scheduling/pad_delay.py "view source code") + +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\_\_ + + + +`__call__(circuit, property_set=None)` + +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(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + +### name + + + +`name()` + +Name of the pass. + +**Return type** + +`str` + +### run + + + +`run(dag)` + +Run the padding pass on `dag`. + +**Parameters** + +**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – 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_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md new file mode 100644 index 00000000000..8c8356ad6f6 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md @@ -0,0 +1,294 @@ +--- +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 + + + +`PadDynamicalDecoupling(durations, dd_sequences, qubits=None, spacings=None, skip_reset_qubits=True, pulse_alignment=16, extra_slack_distribution='middle', sequence_min_length_ratios=None, insert_multiple_cycles=False, coupling_map=None, alt_spacings=None, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/transpiler/passes/scheduling/dynamical_decoupling.py "view source code") + +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 v0.45)")) – Durations of instructions to be used in scheduling. + +* **dd\_sequences** (`Union`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.45)")], `List`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.45)")]]]) – 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 v0.45)")]) – 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\_\_ + + + +`__call__(circuit, property_set=None)` + +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(passmanager_ir, state, callback=None)` + +Execute optimization task for input Qiskit IR. + +**Parameters** + +* **passmanager\_ir** (`Any`) – Qiskit IR to optimize. +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – 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 v0.45)")] + +**Returns** + +Optimized Qiskit IR and state of the workflow. + +### name + + + +`name()` + +Name of the pass. + +**Return type** + +`str` + +### run + + + +`run(dag)` + +Run the padding pass on `dag`. + +**Parameters** + +**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – 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_status(state, run_state)` + +Update workflow status. + +**Parameters** + +* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **run\_state** (`RunState`) – Completion status of current task. + +**Return type** + +[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") + +**Returns** + +Updated pass manager state. + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.md new file mode 100644 index 00000000000..a170e6bd94a --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling.md @@ -0,0 +1,381 @@ +--- +title: scheduling +description: API reference for qiskit_ibm_provider.transpiler.passes.scheduling +in_page_toc_min_heading_level: 1 +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 v0.45)") or [`generate_preset_pass_manager()`](/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v0.45)"). + + +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 +from qiskit.providers.fake_provider import FakeJakarta + + +backend = FakeJakarta() + +# 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\_0\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_0_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\_1\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_1_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 v0.45)") 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 v0.45)"). This returns instances of [`StagedPassManager`](/api/qiskit/qiskit.transpiler.StagedPassManager "(in Qiskit v0.45)"), 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\_2\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_2_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 v0.45)"). 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\_3\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_3_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 v0.45)") 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\_4\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_4_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\_5\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_5_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\_6\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_6_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\_7\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_7_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\_8\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_8_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\_9\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_9_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\_10\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_10_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\_11\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_11_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\_12\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_12_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\_13\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_13_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\_14\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_14_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\_15\_0.png](/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_15_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.8/qiskit_ibm_provider.utils.seconds_to_duration.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.seconds_to_duration.md new file mode 100644 index 00000000000..f508e79035f --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.seconds_to_duration.md @@ -0,0 +1,30 @@ +--- +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 + + + +`seconds_to_duration(seconds)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/utils/converters.py "view source code") + +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.8/qiskit_ibm_provider.utils.to_python_identifier.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.to_python_identifier.md new file mode 100644 index 00000000000..440607a86f6 --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.to_python_identifier.md @@ -0,0 +1,30 @@ +--- +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 + + + +`to_python_identifier(name)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/utils/utils.py "view source code") + +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.8/qiskit_ibm_provider.utils.utc_to_local.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.utc_to_local.md new file mode 100644 index 00000000000..801b7bd34fb --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.utc_to_local.md @@ -0,0 +1,34 @@ +--- +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 + + + +`utc_to_local(utc_dt)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/utils/converters.py "view source code") + +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.8/qiskit_ibm_provider.utils.validate_job_tags.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.validate_job_tags.md new file mode 100644 index 00000000000..960f7919dac --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.utils.validate_job_tags.md @@ -0,0 +1,31 @@ +--- +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 + + + +`validate_job_tags(job_tags, exception)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/utils/utils.py "view source code") + +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.8/qiskit_ibm_provider.visualization.iplot_error_map.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_error_map.md new file mode 100644 index 00000000000..dd92148797e --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_error_map.md @@ -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 + + + +`iplot_error_map(backend, figsize=(800, 500), show_title=True, remove_badcal_edges=True, background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/visualization/interactive/error_map.py "view source code") + +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') +backend = provider.get_backend('ibmq_vigo') + +iplot_error_map(backend, as_widget=True) +``` + diff --git a/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_gate_map.md b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_gate_map.md new file mode 100644 index 00000000000..47ac4a8b95c --- /dev/null +++ b/docs/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.visualization.iplot_gate_map.md @@ -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 + + + +`iplot_gate_map(backend, figsize=(None, None), label_qubits=True, qubit_size=None, line_width=None, font_size=None, qubit_color='#2f4b7c', qubit_labels=None, line_color='#2f4b7c', font_color='white', background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.8/qiskit_ibm_provider/visualization/interactive/gate_map.py "view source code") + +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') +backend = provider.get_backend('ibmq_vigo') + +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 5ff0aaffa87..59eca4a1cae 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.7.3" + "version": "0.9.0" } diff --git a/docs/api/qiskit-ibm-provider/ibm_jupyter.md b/docs/api/qiskit-ibm-provider/ibm_jupyter.md index fe547c51f79..ca6b8521ace 100644 --- a/docs/api/qiskit-ibm-provider/ibm_jupyter.md +++ b/docs/api/qiskit-ibm-provider/ibm_jupyter.md @@ -43,7 +43,7 @@ backend ``` ```python - + ``` ## IBM Quantum dashboard diff --git a/docs/api/qiskit-ibm-provider/ibm_utils.md b/docs/api/qiskit-ibm-provider/ibm_utils.md index 261e7975f71..d82fd9b3592 100644 --- a/docs/api/qiskit-ibm-provider/ibm_utils.md +++ b/docs/api/qiskit-ibm-provider/ibm_utils.md @@ -34,3 +34,81 @@ Utility functions related to the IBM Quantum Provider. | [`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 + + + +`Publisher`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/utils/pubsub.py "view source code") + +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 + + + +`publish(event, *args, **kwargs)` + +Triggers an event, and associates some data to it, so if there are any subscribers, their callback will be called synchronously. + +**Return type** + +`None` + + + +`Subscriber`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/utils/pubsub.py "view source code") + +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 + + + +`clear()` + +Unsubscribe everything + +**Return type** + +`None` + +### subscribe + + + +`subscribe(event, callback)` + +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(event, callback)` + +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/qiskit_ibm_provider.IBMBackend.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.md index 9ffaf345302..48b2131f757 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackend.md @@ -10,11 +10,11 @@ python_api_name: qiskit_ibm_provider.IBMBackend -`IBMBackend(configuration, provider, api_client, instance=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`IBMBackend(configuration, provider, api_client, instance=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/ibm_backend.py "view source code") 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 v0.45)") 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: +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`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)") 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 @@ -30,11 +30,11 @@ 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. + * 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 v0.45)") 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: +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`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v0.46)") 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() @@ -50,7 +50,7 @@ jobs_in_queue = status.pending_jobs * num\_qubits: number of qubits. -* target: A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") object for the backend. +* target: A [`qiskit.transpiler.Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)") object for the backend. * basis\_gates: list of basis gates names on the backend. @@ -144,37 +144,21 @@ IBMBackend constructor. **Parameters** -* **configuration** (`Union`\[[`QasmBackendConfiguration`](/api/qiskit/qiskit.providers.models.QasmBackendConfiguration "(in Qiskit v0.45)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.45)")]) – Backend configuration. +* **configuration** (`Union`\[[`QasmBackendConfiguration`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.QasmBackendConfiguration "(in Qiskit v0.46)"), [`PulseBackendConfiguration`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.46)")]) – 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 - - -### 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. - - + ### coupling\_map -Return the [`CouplingMap`](/api/qiskit/qiskit.transpiler.CouplingMap "(in Qiskit v0.45)") object - - - -### description - -Optional human-readable description. - - - -### dt +Return the [`CouplingMap`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.CouplingMap "(in Qiskit v0.46)") object -`float | None` +### dt Return the system time resolution of input signals @@ -188,57 +172,43 @@ This is required to be implemented if the backend supports Pulse scheduling. The input signal timestep in seconds. If the backend doesn’t define `dt`, `None` will be returned. - - -### dtm - -`float` +### dtm Return the system time resolution of output signals :returns: The output signal timestep in seconds. :rtype: dtm - + ### id\_warning\_issued - - `= False` - + ### instruction\_durations -Return the [`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.45)") object. +Return the [`InstructionDurations`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.46)") object. - + ### instruction\_schedule\_map -Return the [`InstructionScheduleMap`](/api/qiskit/qiskit.pulse.InstructionScheduleMap "(in Qiskit v0.45)") for the instructions defined in this backend’s target. - - - -### instructions +Return the [`InstructionScheduleMap`](https://docs.quantum.ibm.com/api/qiskit/qiskit.pulse.InstructionScheduleMap "(in Qiskit v0.46)") for the instructions defined in this backend’s target. -`List[Tuple[Instruction, Tuple[int]]]` +### 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 v0.45)"), `Tuple`\[`int`]]] - - - -### max\_circuits +`List`\[`Tuple`\[[`Instruction`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.46)"), `Tuple`\[`int`]]] -`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. @@ -246,29 +216,15 @@ The maximum number of circuits The maximum number of circuits that can be run in `int` - - -### meas\_map - -`List[List[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 - - -### name - -Name of the backend. - - - -### num\_qubits - -`int` +### num\_qubits Return the number of qubits the backend has. @@ -276,19 +232,9 @@ Return the number of qubits the backend has. `int` - - -### online\_date - -Date that the backend came online. - - - -### operation\_names - -`List[str]` +### operation\_names A list of instruction names that the backend supports. @@ -296,29 +242,25 @@ A list of instruction names that the backend supports. `List`\[`str`] - - -### operations - -`List[Instruction]` +### operations -A list of [`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.45)") instances that the backend supports. +A list of [`Instruction`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.46)") instances that the backend supports. **Return type** -`List`\[[`Instruction`](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.45)")] +`List`\[[`Instruction`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.46)")] - + ### 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. +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 @@ -332,13 +274,9 @@ the Provider responsible for the backend. Provider - - -### session - -`Session` +### session Return session @@ -346,33 +284,49 @@ Return session [`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") - + ### target - +A [`qiskit.transpiler.Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)") object for the backend. :rtype: [`Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)") :returns: Target + + -`Target` +### version -A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") :returns: Target +`= 2` - + -### version +### name - +Name of the backend. -`= 2` + -## Methods +### 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 -`IBMBackend.acquire_channel(qubit)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`acquire_channel(qubit)` Return the acquisition channel for the given qubit. @@ -384,13 +338,11 @@ The Qubit measurement acquisition line. AcquireChannel - - ### cancel\_session -`IBMBackend.cancel_session()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`cancel_session()` Cancel session. All pending jobs will be cancelled. @@ -398,13 +350,11 @@ Cancel session. All pending jobs will be cancelled. `None` - - ### close\_session -`IBMBackend.close_session()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`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. @@ -412,13 +362,11 @@ Close the session so new jobs will no longer be accepted, but existing queued or `None` - - ### configuration -`IBMBackend.configuration()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`configuration()` Return the backend configuration. @@ -428,19 +376,17 @@ The schema for backend configuration can be found in [Qiskit/ibm-quantum-schemas **Return type** -`Union`\[[`QasmBackendConfiguration`](/api/qiskit/qiskit.providers.models.QasmBackendConfiguration "(in Qiskit v0.45)"), [`PulseBackendConfiguration`](/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.45)")] +`Union`\[[`QasmBackendConfiguration`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.QasmBackendConfiguration "(in Qiskit v0.46)"), [`PulseBackendConfiguration`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.PulseBackendConfiguration "(in Qiskit v0.46)")] **Returns** The configuration for the backend. - - ### control\_channel -`IBMBackend.control_channel(qubits)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`control_channel(qubits)` Return the secondary drive channel for the given qubit. @@ -458,13 +404,11 @@ The Qubit measurement acquisition line. List\[ControlChannel] - - ### defaults -`IBMBackend.defaults(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`defaults(refresh=False)` Return the pulse defaults for the backend. @@ -476,19 +420,17 @@ The schema for default pulse configuration can be found in [Qiskit/ibm-quantum-s **Return type** -`Optional`\[[`PulseDefaults`](/api/qiskit/qiskit.providers.models.PulseDefaults "(in Qiskit v0.45)")] +`Optional`\[[`PulseDefaults`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.PulseDefaults "(in Qiskit v0.46)")] **Returns** The backend pulse defaults or `None` if the backend does not support pulse. - - ### drive\_channel -`IBMBackend.drive_channel(qubit)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`drive_channel(qubit)` Return the drive channel for the given qubit. @@ -500,13 +442,11 @@ The Qubit drive channel DriveChannel - - ### get\_translation\_stage\_plugin -`classmethod IBMBackend.get_translation_stage_plugin()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`classmethod get_translation_stage_plugin()` Return the default translation stage plugin name for IBM backends. @@ -514,13 +454,11 @@ Return the default translation stage plugin name for IBM backends. `str` - - ### measure\_channel -`IBMBackend.measure_channel(qubit)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`measure_channel(qubit)` Return the measure stimulus channel for the given qubit. @@ -532,13 +470,11 @@ The Qubit measurement stimulus line MeasureChannel - - ### open\_session -`IBMBackend.open_session(max_time=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`open_session(max_time=None)` Open session @@ -546,13 +482,11 @@ Open session [`Session`](qiskit_ibm_provider.Session "qiskit_ibm_provider.session.Session") - - ### properties -`IBMBackend.properties(refresh=False, datetime=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`properties(refresh=False, datetime=None)` Return the backend properties, subject to optional filtering. @@ -563,11 +497,11 @@ The schema for backend properties can be found in [Qiskit/ibm-quantum-schemas](h **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 v0.45)") whose timestamp is closest to, but older than, the specified datetime. +* **datetime** (`Optional`\[`datetime`]) – By specifying datetime, this function returns an instance of the [`BackendProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.46)") whose timestamp is closest to, but older than, the specified datetime. **Return type** -`Optional`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)")] +`Optional`\[[`BackendProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.46)")] **Returns** @@ -577,13 +511,11 @@ The backend properties or `None` if the backend properties are not currently ava **TypeError** – If an input argument is not of the correct type. - - ### qubit\_properties -`IBMBackend.qubit_properties(qubit)` +`qubit_properties(qubit)` Return QubitProperties for a given qubit. @@ -595,7 +527,7 @@ If there are no defined or the backend doesn’t support querying these details **Return type** -`Union`\[[`QubitProperties`](/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v0.45)"), `List`\[[`QubitProperties`](/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v0.45)")]] +`Union`\[[`QubitProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v0.46)"), `List`\[[`QubitProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.QubitProperties "(in Qiskit v0.46)")]] **Returns** @@ -605,25 +537,23 @@ The `QubitProperties` object for the specified qubit. If a list of qubits is pro **NotImplementedError** – if the backend doesn’t support querying the qubit properties - - ### run -`IBMBackend.run(circuits, dynamic=None, job_tags=None, init_circuit=None, init_num_resets=None, header=None, shots=None, memory=None, meas_level=None, meas_return=None, rep_delay=None, init_qubits=None, use_measure_esp=None, noise_model=None, seed_simulator=None, **run_config)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`run(circuits, dynamic=None, job_tags=None, init_circuit=None, init_num_resets=None, header=None, shots=None, memory=None, meas_level=None, meas_return=None, rep_delay=None, init_qubits=None, use_measure_esp=None, noise_model=None, seed_simulator=None, **run_config)` 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 v0.45)"), `str`, `List`\[`Union`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)"), `str`]]]) – An individual or a list of `QuantumCircuit`. +* **circuits** (`Union`\[[`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)"), `str`, `List`\[`Union`\[[`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)"), `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 v0.45)")]) – 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\_circuit** (`Optional`\[[`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)")]) – 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. @@ -682,13 +612,11 @@ The job to be executed. * If an input parameter value is not valid. - If ESP readout is used and the backend does not support this. - - ### set\_options -`IBMBackend.set_options(**fields)` +`set_options(**fields)` Set the options fields for the backend @@ -702,23 +630,21 @@ This method is used to update the options of a backend. If you need to change an **AttributeError** – If the field passed in is not part of the options - - ### status -`IBMBackend.status()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`status()` Return the backend status. - If the returned [`BackendStatus`](/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v0.45)") instance has `operational=True` but `status_msg="internal"`, then the backend is accepting jobs but not processing them. + If the returned [`BackendStatus`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v0.46)") 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 v0.45)") +[`BackendStatus`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendStatus "(in Qiskit v0.46)") **Returns** @@ -728,13 +654,11 @@ The status of the backend. [**IBMBackendApiProtocolError**](qiskit_ibm_provider.IBMBackendApiProtocolError "qiskit_ibm_provider.IBMBackendApiProtocolError") – If the status for the backend cannot be formatted properly. - - ### target\_history -`IBMBackend.target_history(datetime=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend.py "view source code") +`target_history(datetime=None)` -A [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") object for the backend. :rtype: [`Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)") :returns: Target with properties found on datetime +A [`qiskit.transpiler.Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)") object for the backend. :rtype: [`Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)") :returns: Target with properties found on datetime diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.md index ddd9eca9b94..4bc2b74adf6 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendApiError -`IBMBackendApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMBackendApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Errors that occur unexpectedly when querying the server. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.md index d9a8a383a71..300a83a331d 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendApiProtocolError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendApiProtocolError -`IBMBackendApiProtocolError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMBackendApiProtocolError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Errors raised when an unexpected value is received from the server. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.md index 6bf6c75d7bc..1743637a528 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendError -`IBMBackendError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMBackendError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Base class for errors raised by the backend modules. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.md index eb0da84b790..2d60c1a1111 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendService.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendService -`IBMBackendService(provider, hgp)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") +`IBMBackendService(provider, hgp)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/ibm_backend_service.py "view source code") Backend namespace for an IBM Quantum account. @@ -42,13 +42,11 @@ IBMBackendService constructor. ## Methods - - ### backends -`IBMBackendService.backends(name=None, filters=None, min_num_qubits=None, instance=None, dynamic_circuits=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") +`backends(name=None, filters=None, min_num_qubits=None, instance=None, dynamic_circuits=None, **kwargs)` Return all backends accessible via this account, subject to optional filtering. @@ -101,13 +99,11 @@ The list of available backends that match the filter. * [**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 -`IBMBackendService.jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") +`jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)` Return a list of jobs, subject to optional filtering. @@ -118,7 +114,7 @@ Retrieve jobs that match the given filters and paginate the results if desired. * **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 v0.45)"), `str`]], [`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.45)"), `str`, `None`]) – Filter jobs with either “pending” or “completed” status. You can also specify by +* **status** (`Union`\[`Literal`\[‘pending’, ‘completed’], `List`\[`Union`\[[`JobStatus`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.46)"), `str`]], [`JobStatus`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.46)"), `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. @@ -143,13 +139,11 @@ A list of `IBMJob` instances. * [**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 -`IBMBackendService.retrieve_job(job_id)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_backend_service.py "view source code") +`retrieve_job(job_id)` Return a single job. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.md index 6b07b48b586..32c19357135 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMBackendValueError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMBackendValueError -`IBMBackendValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMBackendValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Value errors raised by the backend modules. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.md index 599a5995d4d..1aca2603a0e 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMError -`IBMError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Base class for errors raised by the provider modules. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.md index 8dc31ed2c4a..8e82fdcb9d6 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProvider.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMProvider -`IBMProvider(token=None, url=None, name=None, instance=None, proxies=None, verify=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`IBMProvider(token=None, url=None, name=None, instance=None, proxies=None, verify=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/ibm_provider.py "view source code") Provides access to the IBM Quantum services available to an account. @@ -66,19 +66,19 @@ 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: +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: +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. +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: @@ -111,13 +111,9 @@ An instance of IBMProvider ## Attributes - - -### backend - -`IBMBackendService` +### backend Return the backend service. @@ -129,23 +125,19 @@ Return the backend service. The backend service instance. - + ### version - - `= 1` ## Methods - - ### active\_account -`IBMProvider.active_account()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`active_account()` Return the IBM Quantum account currently in use for the session. @@ -157,13 +149,11 @@ Return the IBM Quantum account currently in use for the session. A dictionary with information about the account currently in the session. - - ### backends -`IBMProvider.backends(name=None, filters=None, min_num_qubits=None, instance=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`backends(name=None, filters=None, min_num_qubits=None, instance=None, **kwargs)` Return all backends accessible via this account, subject to optional filtering. @@ -207,13 +197,11 @@ Return all backends accessible via this account, subject to optional filtering. The list of available backends that match the filter. - - ### delete\_account -`static IBMProvider.delete_account(name=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`static delete_account(name=None)` Delete a saved account from disk. @@ -229,13 +217,11 @@ Delete a saved account from disk. True if the account was deleted. False if no account was found. - - ### get\_backend -`IBMProvider.get_backend(name=None, instance=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`get_backend(name=None, instance=None, **kwargs)` Return a single backend matching the specified filtering. @@ -258,13 +244,11 @@ Backend * **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 -`IBMProvider.instances()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`instances()` Return the IBM Quantum instances list currently in use for the session. @@ -276,13 +260,11 @@ Return the IBM Quantum instances list currently in use for the session. A list with instances currently in the session. - - ### jobs -`IBMProvider.jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`jobs(limit=10, skip=0, backend_name=None, status=None, start_datetime=None, end_datetime=None, job_tags=None, descending=True, instance=None, legacy=False)` Return a list of jobs, subject to optional filtering. @@ -311,13 +293,11 @@ Retrieve jobs that match the given filters and paginate the results if desired. A list of `IBMJob` instances. - - ### retrieve\_job -`IBMProvider.retrieve_job(job_id)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`retrieve_job(job_id)` Return a single job. @@ -333,13 +313,11 @@ Return a single job. The job with the given id. - - ### save\_account -`static IBMProvider.save_account(token=None, url=None, instance=None, name=None, proxies=None, verify=None, overwrite=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`static save_account(token=None, url=None, instance=None, name=None, proxies=None, verify=None, overwrite=False)` Save the account to disk for future use. @@ -357,13 +335,11 @@ Save the account to disk for future use. `None` - - ### saved\_accounts -`static IBMProvider.saved_accounts(default=None, name=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/ibm_provider.py "view source code") +`static saved_accounts(default=None, name=None)` List the accounts saved on disk. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.md index 4596e657c77..680b1dbfaa9 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMProviderError -`IBMProviderError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMProviderError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Base class for errors raise by IBMProvider. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.md index 01ec53a02c3..335ceecc83f 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.IBMProviderValueError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.IBMProviderValueError -`IBMProviderValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/exceptions.py "view source code") +`IBMProviderValueError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/exceptions.py "view source code") Value errors raised by IBMProvider. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.md index cad08074f63..f1aea9e57e8 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.Session.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.Session -`Session(max_time=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/session.py "view source code") +`Session(max_time=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/session.py "view source code") Class for creating a flexible Qiskit Runtime session. @@ -18,28 +18,21 @@ A Qiskit Runtime `session` allows you to group a collection of iterative calls t You can open a Qiskit Runtime session using this `Session` class and submit one or more jobs. -For example: +**For example::** -```python -from qiskit.test.reference_circuits import ReferenceCircuits -from qiskit_ibm_provider import IBMProvider - -circ = ReferenceCircuits.bell() -backend = IBMProvider().get_backend("ibmq_qasm_simulator") -backend.open_session() -job = backend.run(circ) -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() -``` +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(ReferenceCircuits.bell()) + job = backend.run(qc) assert job.job_id() == session.session_id ``` @@ -55,13 +48,9 @@ Session constructor. ## Attributes - - -### active - -`bool` +### active Return the status of the session. @@ -73,13 +62,9 @@ Return the status of the session. True if the session is active, False otherwise. - - -### session\_id - -`str` +### session\_id Return the session ID. @@ -93,13 +78,11 @@ Session ID. None until a job runs in the session. ## Methods - - ### cancel -`Session.cancel()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/session.py "view source code") +`cancel()` Set the session.\_active status to False diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.md index 14289b35968..f6624d1536b 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCircuitJob.md @@ -10,13 +10,13 @@ python_api_name: qiskit_ibm_provider.job.IBMCircuitJob -`IBMCircuitJob(backend, api_client, job_id, creation_date=None, status=None, runtime_client=None, kind=None, name=None, time_per_step=None, result=None, error=None, session_id=None, tags=None, run_mode=None, client_info=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`IBMCircuitJob(backend, api_client, job_id, creation_date=None, status=None, runtime_client=None, kind=None, name=None, time_per_step=None, result=None, error=None, session_id=None, tags=None, run_mode=None, client_info=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") 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 v0.45)") members. For example: +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`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.46)") members. For example: ```python from qiskit.providers.jobstatus import JobStatus @@ -35,7 +35,7 @@ except IBMJobApiError as 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: +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(...) @@ -47,7 +47,7 @@ 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. +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. @@ -71,13 +71,9 @@ IBMCircuitJob constructor. ## Attributes - - -### client\_version - -`Dict[str, str]` +### client\_version Return version of the client used for this job. @@ -91,13 +87,9 @@ Return version of the client used for this job. of the client and the value is the version. - - -### usage\_estimation - -`Dict[str, Any]` +### usage\_estimation Return usage estimation information for this job. @@ -109,37 +101,31 @@ Return usage estimation information for this job. `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 - - `= 1` ## Methods - - ### backend -`IBMCircuitJob.backend()` +`backend()` Return the backend where this job was executed. **Return type** -[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") - - +[`Backend`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.46)") ### backend\_options -`IBMCircuitJob.backend_options()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`backend_options()` Return the backend configuration options used for this job. @@ -153,13 +139,11 @@ Options that are not applicable to the job execution are not returned. Some but Backend options used for this job. An empty dictionary is returned if the options cannot be retrieved. - - ### cancel -`IBMCircuitJob.cancel()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`cancel()` Attempt to cancel the job. @@ -180,13 +164,11 @@ Attempt to cancel the job. * [**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 -`IBMCircuitJob.cancelled()` +`cancelled()` Return whether the job has been cancelled. @@ -194,31 +176,27 @@ Return whether the job has been cancelled. `bool` - - ### circuits -`IBMCircuitJob.circuits()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`circuits()` Return the circuits for this job. **Return type** -`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)")] +`List`\[[`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)")] **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 -`IBMCircuitJob.creation_date()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`creation_date()` Return job creation date, in local time. @@ -230,13 +208,11 @@ Return job creation date, in local time. The job creation date as a datetime object, in local time. - - ### done -`IBMCircuitJob.done()` +`done()` Return whether the job has successfully run. @@ -244,13 +220,11 @@ Return whether the job has successfully run. `bool` - - ### error\_message -`IBMCircuitJob.error_message()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`error_message()` Provide details about the reason of failure. @@ -262,13 +236,11 @@ Provide details about the reason of failure. An error report if the job failed or `None` otherwise. - - ### header -`IBMCircuitJob.header()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`header()` Return the user header specified for this job. @@ -280,13 +252,11 @@ Return the user header specified for this job. User header specified for this job. An empty dictionary is returned if the header cannot be retrieved. - - ### in\_final\_state -`IBMCircuitJob.in_final_state()` +`in_final_state()` Return whether the job is in a final job state such as `DONE` or `ERROR`. @@ -294,13 +264,11 @@ Return whether the job is in a final job state such as `DONE` or `ERROR`. `bool` - - ### job\_id -`IBMCircuitJob.job_id()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`job_id()` Return the job ID assigned by the server. @@ -312,13 +280,11 @@ Return the job ID assigned by the server. Job ID. - - ### name -`IBMCircuitJob.name()` +`name()` Return the name assigned to this job. @@ -330,13 +296,11 @@ Return the name assigned to this job. Job name or `None` if no name was assigned to this job. - - ### properties -`IBMCircuitJob.properties(refresh=False)` +`properties(refresh=False)` Return the backend properties for this job. @@ -346,19 +310,17 @@ Return the backend properties for this job. **Return type** -`Optional`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)")] +`Optional`\[[`BackendProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.46)")] **Returns** The backend properties used for this job, at the time the job was run, or `None` if properties are not available. - - ### queue\_info -`IBMCircuitJob.queue_info()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`queue_info()` Return queue information for this job. @@ -376,13 +338,11 @@ The queue information may include queue position, estimated start and end time, 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 -`IBMCircuitJob.queue_position(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`queue_position(refresh=False)` Return the position of the job in the server queue. @@ -402,13 +362,11 @@ Return the position of the job in the server queue. Position in the queue or `None` if position is unknown or not applicable. - - ### refresh -`IBMCircuitJob.refresh()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`refresh()` Obtain the latest job information from the server. @@ -422,13 +380,11 @@ This method may add additional attributes to this job instance, if new informati `None` - - ### result -`IBMCircuitJob.result(timeout=None, refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`result(timeout=None, refresh=False)` Return the result of the job. @@ -439,7 +395,7 @@ Return the result of the job. - 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 v0.45)") instance can be used to verify whether it contains partial results. + 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`](https://docs.quantum.ibm.com/api/qiskit/qiskit.result.Result "(in Qiskit v0.46)") 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: @@ -451,7 +407,7 @@ Return the result of the job. ``` -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. +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** @@ -460,7 +416,7 @@ If the job failed, you can use [`error_message()`](qiskit_ibm_provider.job.IBMCi **Return type** -[`Result`](/api/qiskit/qiskit.result.Result "(in Qiskit v0.45)") +[`Result`](https://docs.quantum.ibm.com/api/qiskit/qiskit.result.Result "(in Qiskit v0.46)") **Returns** @@ -472,13 +428,11 @@ Job result. * [**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 -`IBMCircuitJob.running()` +`running()` Return whether the job is actively running. @@ -486,13 +440,11 @@ Return whether the job is actively running. `bool` - - ### scheduling\_mode -`IBMCircuitJob.scheduling_mode()` +`scheduling_mode()` Return the scheduling mode the job is in. @@ -504,27 +456,25 @@ Return the scheduling mode the job is in. The scheduling mode the job is in or `None` if the information is not available. - - ### status -`IBMCircuitJob.status()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`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. + 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. + 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 v0.45)") +[`JobStatus`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.46)") **Returns** @@ -534,13 +484,11 @@ The status of the job. [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. - - ### submit -`IBMCircuitJob.submit()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`submit()` Unsupported method. @@ -556,13 +504,11 @@ Unsupported method. `None` - - ### tags -`IBMCircuitJob.tags()` +`tags()` Return the tags assigned to this job. @@ -574,13 +520,11 @@ Return the tags assigned to this job. Tags assigned to this job. - - ### time\_per\_step -`IBMCircuitJob.time_per_step()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`time_per_step()` Return the date and time information on each step of the job processing. @@ -600,13 +544,11 @@ The output dictionary contains the date and time information on each step of the Date and time information on job processing steps, in local time, or `None` if the information is not yet available. - - ### update\_name -`IBMCircuitJob.update_name(name)` +`update_name(name)` Update the name associated with this job. @@ -622,13 +564,11 @@ Update the name associated with this job. The new name associated with this job. - - ### update\_tags -`IBMCircuitJob.update_tags(new_tags)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`update_tags(new_tags)` Update the tags associated with this job. @@ -649,15 +589,13 @@ The new tags associated with this job. * [**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 -`IBMCircuitJob.wait_for_final_state(timeout=None, wait=3)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_circuit_job.py "view source code") +`wait_for_final_state(timeout=None, wait=3)` -#### Use the websocket server to wait for the final the state of a job. The server +**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.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.md index ad499371585..8632ee836ce 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMCompositeJob.md @@ -10,19 +10,19 @@ python_api_name: qiskit_ibm_provider.job.IBMCompositeJob -`IBMCompositeJob(backend, api_client, job_id=None, creation_date=None, jobs=None, circuits_list=None, run_config=None, name=None, tags=None, client_version=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`IBMCompositeJob(backend, api_client, job_id=None, creation_date=None, jobs=None, circuits_list=None, run_config=None, name=None, tags=None, client_version=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") 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. +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. +`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. +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_`. @@ -35,7 +35,7 @@ IBMCompositeJob constructor. * **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 v0.45)")]]]) – Circuits for this job. +* **circuits\_list** (`Optional`\[`List`\[`List`\[[`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)")]]]) – Circuits for this job. * **run\_config** (`Optional`\[`Dict`]) – Runtime configuration for this job. * **name** (`Optional`\[`str`]) – Job name. * **tags** (`Optional`\[`List`\[`str`]]) – Job tags. @@ -47,13 +47,9 @@ IBMCompositeJob constructor. ## Attributes - - -### client\_version - -`Dict[str, str]` +### client\_version Return version of the client used for this job. @@ -67,37 +63,31 @@ Return version of the client used for this job. of the client and the value is the version. An empty dictionary is returned if the information is not yet known. - + ### version - - `= 1` ## Methods - - ### backend -`IBMCompositeJob.backend()` +`backend()` Return the backend where this job was executed. **Return type** -[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") - - +[`Backend`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.46)") ### backend\_options -`IBMCompositeJob.backend_options()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`backend_options()` Return the backend configuration options used for this job. @@ -111,13 +101,11 @@ Options that are not applicable to the job execution are not returned. Some but Backend options used for this job. - - ### block\_for\_submit -`IBMCompositeJob.block_for_submit()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`block_for_submit()` Block until all sub-jobs are submitted. @@ -125,13 +113,11 @@ Block until all sub-jobs are submitted. `None` - - ### cancel -`IBMCompositeJob.cancel()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`cancel()` Attempt to cancel the job. @@ -151,13 +137,11 @@ Attempt to cancel the job. [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. - - ### cancelled -`IBMCompositeJob.cancelled()` +`cancelled()` Return whether the job has been cancelled. @@ -165,31 +149,27 @@ Return whether the job has been cancelled. `bool` - - ### circuits -`IBMCompositeJob.circuits()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`circuits()` Return the circuits for this job. **Return type** -`List`\[[`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)")] +`List`\[[`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)")] **Returns** The circuits for this job. - - ### creation\_date -`IBMCompositeJob.creation_date()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`creation_date()` Return job creation date, in local time. @@ -201,13 +181,11 @@ Return job creation date, in local time. The job creation date as a datetime object, in local time, or `None` if job submission hasn’t finished or failed. - - ### done -`IBMCompositeJob.done()` +`done()` Return whether the job has successfully run. @@ -215,13 +193,11 @@ Return whether the job has successfully run. `bool` - - ### error\_message -`IBMCompositeJob.error_message()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`error_message()` Provide details about the reason of failure. @@ -237,13 +213,11 @@ Provide details about the reason of failure. An error report if the job failed or `None` otherwise. - - ### from\_jobs -`classmethod IBMCompositeJob.from_jobs(job_id, jobs, api_client)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`classmethod from_jobs(job_id, jobs, api_client)` Return an instance of this class. @@ -257,19 +231,17 @@ The input job ID is used to query for sub-job information from the server. **Return type** -[`IBMCompositeJob`](qiskit_ibm_provider.job.IBMCompositeJob "qiskit_ibm_provider.job.ibm_composite_job.IBMCompositeJob") +[`IBMCompositeJob`](#qiskit_ibm_provider.job.IBMCompositeJob "qiskit_ibm_provider.job.ibm_composite_job.IBMCompositeJob") **Returns** An instance of this class. - - ### header -`IBMCompositeJob.header()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`header()` Return the user header specified for this job. @@ -281,13 +253,11 @@ Return the user header specified for this job. User header specified for this job. An empty dictionary is returned if the header cannot be retrieved. - - ### in\_final\_state -`IBMCompositeJob.in_final_state()` +`in_final_state()` Return whether the job is in a final job state such as `DONE` or `ERROR`. @@ -295,13 +265,11 @@ Return whether the job is in a final job state such as `DONE` or `ERROR`. `bool` - - ### job\_id -`IBMCompositeJob.job_id()` +`job_id()` Return a unique id identifying the job. @@ -309,13 +277,11 @@ Return a unique id identifying the job. `str` - - ### name -`IBMCompositeJob.name()` +`name()` Return the name assigned to this job. @@ -327,19 +293,17 @@ Return the name assigned to this job. Job name or `None` if no name was assigned to this job. - - ### properties -`IBMCompositeJob.properties(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`properties(refresh=False)` Return the backend properties for this job. -> #### Args: +> **Args:** > -> #### refresh: If `True`, re-query the server for the backend properties. +> **refresh: If `True`, re-query the server for the backend properties.** > > Otherwise, return a cached version. @@ -349,7 +313,7 @@ Return the backend properties for this job. **Return type** -`Union`\[`List`\[[`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)")], [`BackendProperties`](/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.45)"), `None`] +`Union`\[`List`\[[`BackendProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.46)")], [`BackendProperties`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.models.BackendProperties "(in Qiskit v0.46)"), `None`] **Returns** @@ -359,13 +323,11 @@ The backend properties used for this job, or `None` if properties are not availa [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. - - ### queue\_info -`IBMCompositeJob.queue_info()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`queue_info()` Return queue information for this job. @@ -385,13 +347,11 @@ The queue information may include queue position, estimated start and end time, 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 -`IBMCompositeJob.queue_position(refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`queue_position(refresh=False)` Return the position of the job in the server queue. @@ -413,13 +373,11 @@ This method returns the queue position of the sub-job that is last in queue. Position in the queue or `None` if position is unknown or not applicable. - - ### refresh -`IBMCompositeJob.refresh()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`refresh()` Obtain the latest job information from the server. @@ -433,13 +391,11 @@ This method may add additional attributes to this job instance, if new informati `None` - - ### report -`IBMCompositeJob.report(detailed=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`report(detailed=True)` Return a report on current sub-job statuses. @@ -455,13 +411,11 @@ Return a report on current sub-job statuses. A report on sub-job statuses. - - ### rerun\_failed -`IBMCompositeJob.rerun_failed()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`rerun_failed()` Re-submit all failed sub-jobs. @@ -473,13 +427,11 @@ Re-submit all failed sub-jobs. `None` - - ### result -`IBMCompositeJob.result(timeout=None, wait=5, partial=False, refresh=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`result(timeout=None, wait=5, partial=False, refresh=False)` Return the result of the job. @@ -494,7 +446,7 @@ Return the result of the job. - 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 v0.45)") instance can be used to verify whether it contains partial results. + 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`](https://docs.quantum.ibm.com/api/qiskit/qiskit.result.Result "(in Qiskit v0.46)") 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: @@ -506,7 +458,7 @@ Return the result of the job. ``` -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. +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** @@ -517,7 +469,7 @@ If the job failed, you can use [`error_message()`](qiskit_ibm_provider.job.IBMCo **Return type** -[`Result`](/api/qiskit/qiskit.result.Result "(in Qiskit v0.45)") +[`Result`](https://docs.quantum.ibm.com/api/qiskit/qiskit.result.Result "(in Qiskit v0.46)") **Returns** @@ -529,13 +481,11 @@ Job result. * [**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 -`IBMCompositeJob.running()` +`running()` Return whether the job is actively running. @@ -543,13 +493,11 @@ Return whether the job is actively running. `bool` - - ### scheduling\_mode -`IBMCompositeJob.scheduling_mode()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`scheduling_mode()` Return the scheduling mode the job is in. @@ -567,22 +515,20 @@ This information is only available if the job status is `RUNNING` or `DONE`. The scheduling mode the job is in or `None` if the information is not available. - - ### status -`IBMCompositeJob.status()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`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. + 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. + 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. @@ -599,7 +545,7 @@ Query the server for the latest job status. **Return type** -[`JobStatus`](/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.45)") +[`JobStatus`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.JobStatus "(in Qiskit v0.46)") **Returns** @@ -609,13 +555,11 @@ The status of the job. [**IBMJobApiError**](qiskit_ibm_provider.job.IBMJobApiError "qiskit_ibm_provider.job.IBMJobApiError") – If an unexpected error occurred when communicating with the server. - - ### sub\_job -`IBMCompositeJob.sub_job(circuit_index)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`sub_job(circuit_index)` Retrieve the job used to submit the specified circuit. @@ -635,13 +579,11 @@ The Job submitted for the circuit, or `None` if the job has not been submitted o [**IBMJobInvalidStateError**](qiskit_ibm_provider.job.IBMJobInvalidStateError "qiskit_ibm_provider.job.IBMJobInvalidStateError") – If the circuit index is out of range. - - ### sub\_jobs -`IBMCompositeJob.sub_jobs(block_for_submit=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`sub_jobs(block_for_submit=True)` Return all submitted sub-jobs. @@ -657,13 +599,11 @@ Return all submitted sub-jobs. All submitted sub-jobs. - - ### submit -`IBMCompositeJob.submit()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`submit()` Unsupported method. @@ -679,13 +619,11 @@ Unsupported method. `None` - - ### tags -`IBMCompositeJob.tags()` +`tags()` Return the tags assigned to this job. @@ -697,13 +635,11 @@ Return the tags assigned to this job. Tags assigned to this job. - - ### time\_per\_step -`IBMCompositeJob.time_per_step()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`time_per_step()` Return the date and time information on each step of the job processing. @@ -723,13 +659,11 @@ The output dictionary contains the date and time information on each step of the Date and time information on job processing steps, in local time, or `None` if the information is not yet available. - - ### update\_name -`IBMCompositeJob.update_name(name)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`update_name(name)` Update the name associated with this job. @@ -754,13 +688,11 @@ The new name associated with this job. * [**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 -`IBMCompositeJob.update_tags(new_tags)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`update_tags(new_tags)` Update the tags associated with this job. @@ -785,13 +717,11 @@ The new tags associated with this job. * [**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 -`IBMCompositeJob.wait_for_final_state(timeout=None, wait=None, callback=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/ibm_composite_job.py "view source code") +`wait_for_final_state(timeout=None, wait=None, callback=None)` Wait until the job progresses to a final state such as `DONE` or `ERROR`. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.md index a00247d081e..01d31cbcb05 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobApiError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobApiError -`IBMJobApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") +`IBMJobApiError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/exceptions.py "view source code") Errors that occur unexpectedly when querying the server. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.md index 0db698eca26..67c71709c7d 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobError -`IBMJobError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") +`IBMJobError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/exceptions.py "view source code") Base class for errors raised by the job modules. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.md index 6a29845ffd0..7b39382f374 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobFailureError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobFailureError -`IBMJobFailureError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") +`IBMJobFailureError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/exceptions.py "view source code") Errors raised when a job failed. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.md index 53e1d94f7a8..8154950d17e 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobInvalidStateError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobInvalidStateError -`IBMJobInvalidStateError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") +`IBMJobInvalidStateError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/exceptions.py "view source code") Errors raised when a job is not in a valid state for the operation. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.md index 921539f26b0..0017ef4a500 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.IBMJobTimeoutError.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.IBMJobTimeoutError -`IBMJobTimeoutError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/exceptions.py "view source code") +`IBMJobTimeoutError(*message)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/exceptions.py "view source code") Errors raised when a job operation times out. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.md index bee21730319..831f50b3584 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.QueueInfo.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.job.QueueInfo -`QueueInfo(position_in_queue=None, status=None, estimated_start_time=None, estimated_completion_time=None, hub_priority=None, group_priority=None, project_priority=None, job_id=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/queueinfo.py "view source code") +`QueueInfo(position_in_queue=None, status=None, estimated_start_time=None, estimated_completion_time=None, hub_priority=None, group_priority=None, project_priority=None, job_id=None, **kwargs)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/queueinfo.py "view source code") Queue information for a job. @@ -30,13 +30,9 @@ QueueInfo constructor. ## Attributes - - -### estimated\_complete\_time - -`datetime | None` +### estimated\_complete\_time Return estimated complete time in local time. @@ -44,13 +40,9 @@ Return estimated complete time in local time. `Optional`\[`datetime`] - - -### estimated\_start\_time - -`datetime | None` +### estimated\_start\_time Return estimated start time in local time. @@ -60,13 +52,11 @@ Return estimated start time in local time. ## Methods - - ### format -`QueueInfo.format()`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/queueinfo.py "view source code") +`format()` Build a user-friendly report for the job queue information. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.md index c5dbc48f0e4..16af83243fe 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.job.job_monitor.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.job.job_monitor -`job_monitor(job, interval=None, output=<_io.TextIOWrapper name='' mode='w' encoding='utf-8'>)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/job/job_monitor.py "view source code") +`job_monitor(job, interval=None, output=<_io.TextIOWrapper name='' mode='w' encoding='utf-8'>)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/job/job_monitor.py "view source code") Monitor the status of an `IBMJob` instance. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.md index 3db875f86b3..65377baeb08 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.least_busy.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.least_busy -`least_busy(backends)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/__init__.py "view source code") +`least_busy(backends)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/__init__.py "view source code") Return the least busy backend from a list. @@ -20,11 +20,11 @@ Return the least busy available backend for those that have a `pending_jobs` in **Parameters** -**backends** (`List`\[[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)")]) – The backends to choose from. +**backends** (`List`\[[`Backend`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.46)")]) – The backends to choose from. **Return type** -[`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)") +[`Backend`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.46)") **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md index e1c2959ff71..72f612ad7ad 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAnalysis.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ALAPScheduleAn -`ALAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") +`ALAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") Dynamic circuits as-late-as-possible (ALAP) scheduling analysis pass. @@ -32,11 +32,11 @@ Scheduler for dynamic circuit backends. **Parameters** -**durations** ([`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.45)")) – Durations of instructions to be used in scheduling. +**durations** ([`InstructionDurations`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.46)")) – Durations of instructions to be used in scheduling. ## Attributes - + ### is\_analysis\_pass @@ -44,7 +44,7 @@ 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 @@ -54,13 +54,11 @@ If the pass is a TransformationPass, that means that the pass can manipulate the ## Methods - - ### \_\_call\_\_ -`ALAPScheduleAnalysis.__call__(circuit, property_set=None)` +`__call__(circuit, property_set=None)` Runs the pass on circuit. @@ -77,37 +75,33 @@ QuantumCircuit If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. - - ### execute -`ALAPScheduleAnalysis.execute(passmanager_ir, state, callback=None)` +`execute(passmanager_ir, state, callback=None)` Execute optimization task for input Qiskit IR. **Parameters** * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – State associated with workflow execution by the pass manager itself. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – 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 v0.45)")] +`tuple`\[`Any`, [`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")] **Returns** Optimized Qiskit IR and state of the workflow. - - ### name -`ALAPScheduleAnalysis.name()` +`name()` Name of the pass. @@ -115,15 +109,13 @@ Name of the pass. `str` - - ### run -`ALAPScheduleAnalysis.run(dag)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") +`run(dag)` -Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") :param dag: DAG to schedule. :type dag: DAGCircuit +Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.46)") :param dag: DAG to schedule. :type dag: DAGCircuit **Raises** @@ -138,24 +130,22 @@ Run the ASAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.d The scheduled DAGCircuit. - - ### update\_status -`ALAPScheduleAnalysis.update_status(state, run_state)` +`update_status(state, run_state)` Update workflow status. **Parameters** -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – Pass manager state to update. * **run\_state** (`RunState`) – Completion status of current task. **Return type** -[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") +[`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)") **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md index 8f57c9c4540..56684c1214e 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAnalysis.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.ASAPScheduleAn -`ASAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") +`ASAPScheduleAnalysis(durations)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") Dynamic circuits as-soon-as-possible (ASAP) scheduling analysis pass. @@ -32,11 +32,11 @@ Scheduler for dynamic circuit backends. **Parameters** -**durations** ([`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.45)")) – Durations of instructions to be used in scheduling. +**durations** ([`InstructionDurations`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.46)")) – Durations of instructions to be used in scheduling. ## Attributes - + ### is\_analysis\_pass @@ -44,7 +44,7 @@ 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 @@ -54,13 +54,11 @@ If the pass is a TransformationPass, that means that the pass can manipulate the ## Methods - - ### \_\_call\_\_ -`ASAPScheduleAnalysis.__call__(circuit, property_set=None)` +`__call__(circuit, property_set=None)` Runs the pass on circuit. @@ -77,37 +75,33 @@ QuantumCircuit If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. - - ### execute -`ASAPScheduleAnalysis.execute(passmanager_ir, state, callback=None)` +`execute(passmanager_ir, state, callback=None)` Execute optimization task for input Qiskit IR. **Parameters** * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – State associated with workflow execution by the pass manager itself. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – 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 v0.45)")] +`tuple`\[`Any`, [`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")] **Returns** Optimized Qiskit IR and state of the workflow. - - ### name -`ASAPScheduleAnalysis.name()` +`name()` Name of the pass. @@ -115,15 +109,13 @@ Name of the pass. `str` - - ### run -`ASAPScheduleAnalysis.run(dag)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/scheduler.py "view source code") +`run(dag)` -Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") :param dag: DAG to schedule. :type dag: DAGCircuit +Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.46)") :param dag: DAG to schedule. :type dag: DAGCircuit **Raises** @@ -132,30 +124,28 @@ Run the ALAPSchedule pass on dag. :type dag: [`DAGCircuit`](/api/qiskit/qiskit.d **Return type** -[`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)") +[`DAGCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.46)") **Returns** The scheduled DAGCircuit. - - ### update\_status -`ASAPScheduleAnalysis.update_status(state, run_state)` +`update_status(state, run_state)` Update workflow status. **Parameters** -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – Pass manager state to update. * **run\_state** (`RunState`) – Completion status of current task. **Return type** -[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") +[`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)") **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md index 404b940b8f6..c226ef6d19f 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadder.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.BlockBasePadde -`BlockBasePadder(schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/block_base_padder.py "view source code") +`BlockBasePadder(schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/transpiler/passes/scheduling/block_base_padder.py "view source code") The base class of padding pass. @@ -27,7 +27,7 @@ Any manipulation violating these constraints may prevent this base pass from cor ## Attributes - + ### is\_analysis\_pass @@ -35,7 +35,7 @@ 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 @@ -45,13 +45,11 @@ If the pass is a TransformationPass, that means that the pass can manipulate the ## Methods - - ### \_\_call\_\_ -`BlockBasePadder.__call__(circuit, property_set=None)` +`__call__(circuit, property_set=None)` Runs the pass on circuit. @@ -68,37 +66,33 @@ QuantumCircuit If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. - - ### execute -`BlockBasePadder.execute(passmanager_ir, state, callback=None)` +`execute(passmanager_ir, state, callback=None)` Execute optimization task for input Qiskit IR. **Parameters** * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – State associated with workflow execution by the pass manager itself. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – 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 v0.45)")] +`tuple`\[`Any`, [`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")] **Returns** Optimized Qiskit IR and state of the workflow. - - ### name -`BlockBasePadder.name()` +`name()` Name of the pass. @@ -106,19 +100,17 @@ Name of the pass. `str` - - ### run -`BlockBasePadder.run(dag)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/block_base_padder.py "view source code") +`run(dag)` Run the padding pass on `dag`. **Parameters** -**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – DAG to be checked. +**dag** ([`DAGCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.46)")) – DAG to be checked. **Returns** @@ -132,24 +124,22 @@ DAGCircuit **TranspilerError** – When a particular node is not scheduled, likely some transform pass is inserted before this node is called. - - ### update\_status -`BlockBasePadder.update_status(state, run_state)` +`update_status(state, run_state)` Update workflow status. **Parameters** -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – Pass manager state to update. * **run\_state** (`RunState`) – Completion status of current task. **Return type** -[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") +[`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)") **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md index 99ea8ed5b11..8361388a793 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuitInstructionDurations.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.DynamicCircuit -`DynamicCircuitInstructionDurations(instruction_durations=None, dt=None, enable_patching=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/utils.py "view source code") +`DynamicCircuitInstructionDurations(instruction_durations=None, dt=None, enable_patching=True)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/transpiler/passes/scheduling/utils.py "view source code") 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. @@ -18,37 +18,31 @@ Dynamic circuit instruction durations. ## Attributes - + ### MEASURE\_PATCH\_CYCLES - - `= 160` - + ### MEASURE\_PATCH\_ODD\_OFFSET - - `= 64` ## Methods - - ### from\_backend -`classmethod DynamicCircuitInstructionDurations.from_backend(backend)` +`classmethod from_backend(backend)` -Construct an `InstructionDurations` object from the backend. +Construct a `DynamicInstructionDurations` object from the backend. **Parameters** -**backend** ([`Backend`](/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.45)")) – backend from which durations (gate lengths) and dt are extracted. +**backend** ([`Backend`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.Backend "(in Qiskit v0.46)")) – backend from which durations (gate lengths) and dt are extracted. **Returns** @@ -56,19 +50,33 @@ The InstructionDurations constructed from backend. **Return type** -InstructionDurations +DynamicInstructionDurations -**Raises** +### from\_target + + + +`classmethod from_target(target)` -**TranspilerError** – If dt and dtm is different in the backend. +Construct a `DynamicInstructionDurations` object from the target. - +**Parameters** + +**target** ([`Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)")) – target from which durations (gate lengths) and dt are extracted. + +**Returns** + +The InstructionDurations constructed from backend. + +**Return type** + +DynamicInstructionDurations ### get -`DynamicCircuitInstructionDurations.get(inst, qubits, unit='dt', parameters=None)` +`get(inst, qubits, unit='dt', parameters=None)` Get the duration of the instruction with the name, qubits, and parameters. @@ -76,7 +84,7 @@ Some instructions may have a parameter dependent duration. **Parameters** -* **inst** (*str |* [*qiskit.circuit.Instruction*](/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.45)")) – An instruction or its name to be queried. +* **inst** (*str |* [*qiskit.circuit.Instruction*](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Instruction "(in Qiskit v0.46)")) – 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. @@ -93,13 +101,11 @@ float|int **TranspilerError** – No duration is defined for the instruction. - - ### units\_used -`DynamicCircuitInstructionDurations.units_used()` +`units_used()` Get the set of all units used in this instruction durations. @@ -111,19 +117,17 @@ Get the set of all units used in this instruction durations. Set of units used in this instruction durations. - - ### update -`DynamicCircuitInstructionDurations.update(inst_durations, dt=None)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/utils.py "view source code") +`update(inst_durations, dt=None)` 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 v0.45)"), `None`]) – Instruction durations to be merged into self (overwriting self). +* **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`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.46)"), `None`]) – Instruction durations to be merged into self (overwriting self). * **dt** (`Optional`\[`float`]) – Sampling duration in seconds of the target backend. **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md index 435234bc4ab..8f9ce86c6f2 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDelay -`PadDelay(fill_very_end=True, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/pad_delay.py "view source code") +`PadDelay(fill_very_end=True, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/transpiler/passes/scheduling/pad_delay.py "view source code") Padding idle time with Delay instructions. @@ -39,7 +39,7 @@ Create new padding delay pass. ## Attributes - + ### is\_analysis\_pass @@ -47,7 +47,7 @@ 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 @@ -57,13 +57,11 @@ If the pass is a TransformationPass, that means that the pass can manipulate the ## Methods - - ### \_\_call\_\_ -`PadDelay.__call__(circuit, property_set=None)` +`__call__(circuit, property_set=None)` Runs the pass on circuit. @@ -80,37 +78,33 @@ QuantumCircuit If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. - - ### execute -`PadDelay.execute(passmanager_ir, state, callback=None)` +`execute(passmanager_ir, state, callback=None)` Execute optimization task for input Qiskit IR. **Parameters** * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – State associated with workflow execution by the pass manager itself. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – 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 v0.45)")] +`tuple`\[`Any`, [`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")] **Returns** Optimized Qiskit IR and state of the workflow. - - ### name -`PadDelay.name()` +`name()` Name of the pass. @@ -118,19 +112,17 @@ Name of the pass. `str` - - ### run -`PadDelay.run(dag)` +`run(dag)` Run the padding pass on `dag`. **Parameters** -**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – DAG to be checked. +**dag** ([`DAGCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.46)")) – DAG to be checked. **Returns** @@ -144,24 +136,22 @@ DAGCircuit **TranspilerError** – When a particular node is not scheduled, likely some transform pass is inserted before this node is called. - - ### update\_status -`PadDelay.update_status(state, run_state)` +`update_status(state, run_state)` Update workflow status. **Parameters** -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – Pass manager state to update. * **run\_state** (`RunState`) – Completion status of current task. **Return type** -[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") +[`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)") **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md index d2793235276..117c1d0327c 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDecoupling.md @@ -10,7 +10,7 @@ python_api_name: qiskit_ibm_provider.transpiler.passes.scheduling.PadDynamicalDe -`PadDynamicalDecoupling(durations, dd_sequences, qubits=None, spacings=None, skip_reset_qubits=True, pulse_alignment=16, extra_slack_distribution='middle', sequence_min_length_ratios=None, insert_multiple_cycles=False, coupling_map=None, alt_spacings=None, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/transpiler/passes/scheduling/dynamical_decoupling.py "view source code") +`PadDynamicalDecoupling(durations, dd_sequences, qubits=None, spacings=None, skip_reset_qubits=True, pulse_alignment=16, extra_slack_distribution='middle', sequence_min_length_ratios=None, insert_multiple_cycles=False, coupling_map=None, alt_spacings=None, schedule_idle_qubits=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/transpiler/passes/scheduling/dynamical_decoupling.py "view source code") Dynamical decoupling insertion pass for IBM dynamic circuit backends. @@ -137,9 +137,9 @@ Dynamical decoupling initializer. **Parameters** -* **durations** ([`InstructionDurations`](/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.45)")) – Durations of instructions to be used in scheduling. +* **durations** ([`InstructionDurations`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.InstructionDurations "(in Qiskit v0.46)")) – Durations of instructions to be used in scheduling. -* **dd\_sequences** (`Union`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.45)")], `List`\[`List`\[[`Gate`](/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.45)")]]]) – 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`. +* **dd\_sequences** (`Union`\[`List`\[[`Gate`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.46)")], `List`\[`List`\[[`Gate`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Gate "(in Qiskit v0.46)")]]]) – 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). @@ -160,7 +160,7 @@ Dynamical decoupling initializer. * **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 v0.45)")]) – 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. +* **coupling\_map** (`Optional`\[[`CouplingMap`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.CouplingMap "(in Qiskit v0.46)")]) – 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]. @@ -174,7 +174,7 @@ Dynamical decoupling initializer. ## Attributes - + ### is\_analysis\_pass @@ -182,7 +182,7 @@ 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 @@ -192,13 +192,11 @@ If the pass is a TransformationPass, that means that the pass can manipulate the ## Methods - - ### \_\_call\_\_ -`PadDynamicalDecoupling.__call__(circuit, property_set=None)` +`__call__(circuit, property_set=None)` Runs the pass on circuit. @@ -215,37 +213,33 @@ QuantumCircuit If on transformation pass, the resulting QuantumCircuit. If analysis pass, the input circuit. - - ### execute -`PadDynamicalDecoupling.execute(passmanager_ir, state, callback=None)` +`execute(passmanager_ir, state, callback=None)` Execute optimization task for input Qiskit IR. **Parameters** * **passmanager\_ir** (`Any`) – Qiskit IR to optimize. -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – State associated with workflow execution by the pass manager itself. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – 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 v0.45)")] +`tuple`\[`Any`, [`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")] **Returns** Optimized Qiskit IR and state of the workflow. - - ### name -`PadDynamicalDecoupling.name()` +`name()` Name of the pass. @@ -253,19 +247,17 @@ Name of the pass. `str` - - ### run -`PadDynamicalDecoupling.run(dag)` +`run(dag)` Run the padding pass on `dag`. **Parameters** -**dag** ([`DAGCircuit`](/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.45)")) – DAG to be checked. +**dag** ([`DAGCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.dagcircuit.DAGCircuit "(in Qiskit v0.46)")) – DAG to be checked. **Returns** @@ -279,24 +271,22 @@ DAGCircuit **TranspilerError** – When a particular node is not scheduled, likely some transform pass is inserted before this node is called. - - ### update\_status -`PadDynamicalDecoupling.update_status(state, run_state)` +`update_status(state, run_state)` Update workflow status. **Parameters** -* **state** ([`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)")) – Pass manager state to update. +* **state** ([`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)")) – Pass manager state to update. * **run\_state** (`RunState`) – Completion status of current task. **Return type** -[`PassManagerState`](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.45)") +[`PassManagerState`](https://docs.quantum.ibm.com/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v0.46)") **Returns** diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.md index d0d4a2b016e..7028b5059a8 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling.md @@ -21,7 +21,7 @@ python_api_name: 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 v0.45)") or [`generate_preset_pass_manager()`](/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v0.45)"). + 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()`](https://docs.quantum.ibm.com/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v0.46)") or [`generate_preset_pass_manager()`](https://docs.quantum.ibm.com/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v0.46)"). Below we demonstrate how to schedule and pad a teleportation circuit with delays for a dynamic circuit backend’s execution model: @@ -34,10 +34,13 @@ 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 -from qiskit.providers.fake_provider import FakeJakarta +try: + from qiskit.providers.fake_provider import Fake7QPulseV1 +except ImportError: + from qiskit.providers.fake_provider import FakeJakarta as Fake7QPulseV1 -backend = FakeJakarta() +backend = Fake7QPulseV1() # Temporary workaround for mock backends. For real backends this is not required. backend.configuration().basis_gates.append("if_else") @@ -76,7 +79,7 @@ scheduled_teleport = pm.run(teleport) scheduled_teleport.draw(output="mpl", style="iqp") ``` -![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_0\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_0_0.png) +![../\_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: @@ -101,9 +104,9 @@ dd_teleport = pm.run(teleport) dd_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) +![../\_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 v0.45)") 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 v0.45)"). This returns instances of [`StagedPassManager`](/api/qiskit/qiskit.transpiler.StagedPassManager "(in Qiskit v0.45)"), which can be extended. +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()`](https://docs.quantum.ibm.com/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v0.46)") function internally builds its pass set by using [`generate_preset_pass_manager()`](https://docs.quantum.ibm.com/api/qiskit/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_preset_pass_manager "(in Qiskit v0.46)"). This returns instances of [`StagedPassManager`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.StagedPassManager "(in Qiskit v0.46)"), which can be extended. @@ -117,9 +120,9 @@ qc_c_if.x(0).c_if(0, 1) qc_c_if.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) +![../\_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 v0.45)"). 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. +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()`](https://docs.quantum.ibm.com/api/qiskit/compiler#qiskit.compiler.transpile "(in Qiskit v0.46)"). 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. @@ -137,9 +140,9 @@ qc_if_dd = pm.run(qc_c_if, backend) qc_if_dd.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) +![../\_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 v0.45)") prior to your scheduling pass. +If you are not using the transpiler plugin stages to work around this please manually run the pass [`qiskit.transpiler.passes.ConvertConditionsToIfOps`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.passes.ConvertConditionsToIfOps "(in Qiskit v0.46)") prior to your scheduling pass. ```python from qiskit.transpiler.passes import ConvertConditionsToIfOps @@ -157,7 +160,7 @@ qc_if_dd = pm.run(qc_c_if) 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) +![../\_images/qiskit\_ibm\_provider.transpiler.passes.scheduling\_5\_0.png](/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png) @@ -180,7 +183,7 @@ with qc.if_test((1, 1)): qc.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) +![../\_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. @@ -193,7 +196,7 @@ with qc.if_test((0, 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) +![../\_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. @@ -207,7 +210,7 @@ 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) +![../\_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. @@ -225,7 +228,7 @@ with qc.if_test((1, 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) +![../\_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. @@ -242,7 +245,7 @@ with else_: 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) +![../\_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. @@ -260,7 +263,7 @@ with qc.if_test((0, 1)): 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) +![../\_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. @@ -275,7 +278,7 @@ 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) +![../\_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. @@ -289,7 +292,7 @@ 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) +![../\_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. @@ -305,7 +308,7 @@ 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) +![../\_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 @@ -339,7 +342,7 @@ qc_dd = pm.run(qc) qc_dd.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) +![../\_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. @@ -363,7 +366,7 @@ qc_dd.draw(output="mpl", style="iqp") qc.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) + ![../\_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.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.md index dc8305df66c..33be2bf3a09 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.seconds_to_duration.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.utils.seconds_to_duration -`seconds_to_duration(seconds)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/converters.py "view source code") +`seconds_to_duration(seconds)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/utils/converters.py "view source code") Converts seconds in a datetime delta to a duration. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.md index d30697dc36d..9ea18aaaeae 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.to_python_identifier.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.utils.to_python_identifier -`to_python_identifier(name)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/utils.py "view source code") +`to_python_identifier(name)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/utils/utils.py "view source code") Convert a name to a valid Python identifier. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.md index 5da694da13c..49064cd23ba 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.utc_to_local.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.utils.utc_to_local -`utc_to_local(utc_dt)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/converters.py "view source code") +`utc_to_local(utc_dt)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/utils/converters.py "view source code") Convert a UTC `datetime` object or string to a local timezone `datetime`. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.md index a9254617954..64f346e6fa4 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.utils.validate_job_tags.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.utils.validate_job_tags -`validate_job_tags(job_tags, exception)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/utils/utils.py "view source code") +`validate_job_tags(job_tags, exception)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/utils/utils.py "view source code") Validates input job tags. diff --git a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.md index f038a764762..7b644183726 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_error_map.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.visualization.iplot_error_map -`iplot_error_map(backend, figsize=(800, 500), show_title=True, remove_badcal_edges=True, background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/visualization/interactive/error_map.py "view source code") +`iplot_error_map(backend, figsize=(800, 500), show_title=True, remove_badcal_edges=True, background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/visualization/interactive/error_map.py "view source code") Plot the error map of a device. @@ -45,7 +45,9 @@ from qiskit_ibm_provider import IBMProvider from qiskit_ibm_provider.visualization import iplot_error_map provider = IBMProvider(group='open', project='main') -backend = provider.get_backend('ibmq_vigo') +# 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/qiskit_ibm_provider.visualization.iplot_gate_map.md b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.md index 90b83947e11..355975019ba 100644 --- a/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.md +++ b/docs/api/qiskit-ibm-provider/qiskit_ibm_provider.visualization.iplot_gate_map.md @@ -12,7 +12,7 @@ python_api_name: qiskit_ibm_provider.visualization.iplot_gate_map -`iplot_gate_map(backend, figsize=(None, None), label_qubits=True, qubit_size=None, line_width=None, font_size=None, qubit_color='#2f4b7c', qubit_labels=None, line_color='#2f4b7c', font_color='white', background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.7/qiskit_ibm_provider/visualization/interactive/gate_map.py "view source code") +`iplot_gate_map(backend, figsize=(None, None), label_qubits=True, qubit_size=None, line_width=None, font_size=None, qubit_color='#2f4b7c', qubit_labels=None, line_color='#2f4b7c', font_color='white', background_color='white', as_widget=False)`[GitHub](https://github.com/qiskit/qiskit-ibm-provider/tree/stable/0.9/qiskit_ibm_provider/visualization/interactive/gate_map.py "view source code") Plots an interactive gate map of a device. @@ -42,12 +42,14 @@ The gate map figure. **Example** ```python -from qiskit_ibm_provider import IBMProvider -from qiskit_ibm_provider.visualization import iplot_gate_map + from qiskit_ibm_provider import IBMProvider + from qiskit_ibm_provider.visualization import iplot_gate_map provider = IBMProvider(group='open', project='main') -backend = provider.get_backend('ibmq_vigo') +# 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) + iplot_gate_map(backend, as_widget=True) ``` diff --git a/docs/api/qiskit-ibm-provider/release-notes.md b/docs/api/qiskit-ibm-provider/release-notes.md index 453b6c50a5e..dfdede7af99 100644 --- a/docs/api/qiskit-ibm-provider/release-notes.md +++ b/docs/api/qiskit-ibm-provider/release-notes.md @@ -6,7 +6,7 @@ in_page_toc_max_heading_level: 2 -# Qiskit IBM Provider 0.7 release notes +# Qiskit IBM Provider 0.9 release notes @@ -80,7 +80,7 @@ in_page_toc_max_heading_level: 2 * Fixes a bug in the function `jobs()`. Refer to [#586](https://github.com/Qiskit/qiskit-ibm-provider/issues/586) for more details. -* A transpilation error will no longer occur when attempting to transpile a circuit containing a conditional [`IGate`](/api/qiskit/qiskit.circuit.library.IGate "(in Qiskit v0.45)") with Qiskit 0.44. +* A transpilation error will no longer occur when attempting to transpile a circuit containing a conditional [`IGate`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.library.IGate "(in Qiskit v0.46)") with Qiskit 0.44. * 2pi wrapping cannot be applied on a parameterized global phase. Use the DAGCircuit `global_phase` setter to wrap the phase for floats only. @@ -194,7 +194,7 @@ in_page_toc_max_heading_level: 2 * If the `dynamic` parameter is set to `True` in [`run()`](qiskit_ibm_provider.IBMBackend#run "qiskit_ibm_provider.IBMBackend.run") and the backend being used does not support dymamic circuits, a warning will be raised. -* When constructing a backend [`qiskit.transpiler.Target`](/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.45)"), faulty qubits and gates from the backend configuration will be filtered out. +* When constructing a backend [`qiskit.transpiler.Target`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.Target "(in Qiskit v0.46)"), faulty qubits and gates from the backend configuration will be filtered out. @@ -343,7 +343,7 @@ in_page_toc_max_heading_level: 2 ### Upgrade Notes -* Scheduling support for `c_if` has been removed. Please run the pass [`qiskit.transpiler.passes.ConvertConditionsToIfOps`](/api/qiskit/qiskit.transpiler.passes.ConvertConditionsToIfOps "(in Qiskit v0.45)") on your circuit before scheduling to convert all old format `c_if` statements to new format `if_test` control-flow that may be scheduled. +* Scheduling support for `c_if` has been removed. Please run the pass [`qiskit.transpiler.passes.ConvertConditionsToIfOps`](https://docs.quantum.ibm.com/api/qiskit/qiskit.transpiler.passes.ConvertConditionsToIfOps "(in Qiskit v0.46)") on your circuit before scheduling to convert all old format `c_if` statements to new format `if_test` control-flow that may be scheduled. ```python from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister @@ -415,7 +415,7 @@ in_page_toc_max_heading_level: 2 * The meth:\~qiskit\_ibm\_provider.IBMProvider.instances was added to list all the available instances in a provider instance. -* A new transpiler pass ``qiskit_ibm_provider.transpiler.passes.basis.ConvertIdToDelay was added which converts an :class:`qiskit.circuit.library.IGate`` to [`qiskit.circuit.Delay`](/api/qiskit/qiskit.circuit.Delay "(in Qiskit v0.45)"). This was added to the default transpiler plugin `qiskit_ibm_provider.transpiler.plugin.IBMTranslationPlugin`. +* A new transpiler pass ``qiskit_ibm_provider.transpiler.passes.basis.ConvertIdToDelay was added which converts an :class:`qiskit.circuit.library.IGate`` to [`qiskit.circuit.Delay`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Delay "(in Qiskit v0.46)"). This was added to the default transpiler plugin `qiskit_ibm_provider.transpiler.plugin.IBMTranslationPlugin`. @@ -433,7 +433,7 @@ in_page_toc_max_heading_level: 2 * A bug was fixed in `qiskit.transpiler.passes.scheduling.LAPScheduleAnalysis` which was caused by an bad interaction between duration-less gates such as `rz` and `barrier`. -* A bug was fixed where conditional [`qiskit.circuit.library.IGate`](/api/qiskit/qiskit.circuit.library.IGate "(in Qiskit v0.45)") were being converted to unconditional [`qiskit.circuit.Delay`](/api/qiskit/qiskit.circuit.Delay "(in Qiskit v0.45)") operations rather than conditional operations. +* A bug was fixed where conditional [`qiskit.circuit.library.IGate`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.library.IGate "(in Qiskit v0.46)") were being converted to unconditional [`qiskit.circuit.Delay`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.Delay "(in Qiskit v0.46)") operations rather than conditional operations. * Fixed an issue where filtering by instance with [`jobs()`](qiskit_ibm_provider.IBMBackendService#jobs "qiskit_ibm_provider.IBMBackendService.jobs") was not working correctly. @@ -607,7 +607,7 @@ qiskit-ibm-provider is a new Python API client for accessing the quantum systems provider.active_account() # check active account ``` -* [`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.IBMBackend") class now implements the [`qiskit.providers.BackendV2`](/api/qiskit/qiskit.providers.BackendV2 "(in Qiskit v0.45)") interface and provides flatter access to the configuration of a backend, for example: +* [`IBMBackend`](qiskit_ibm_provider.IBMBackend "qiskit_ibm_provider.IBMBackend") class now implements the [`qiskit.providers.BackendV2`](https://docs.quantum.ibm.com/api/qiskit/qiskit.providers.BackendV2 "(in Qiskit v0.46)") interface and provides flatter access to the configuration of a backend, for example: ```python # BackendV1: @@ -672,7 +672,7 @@ qiskit-ibm-provider is a new Python API client for accessing the quantum systems * qiskit.providers.ibmq.IBMQBackend.retrieve\_job() and qiskit.providers.ibmq.IBMQBackend.jobs() have been removed. The IBMBackendService methods `job()` and [`jobs()`](qiskit_ibm_provider.IBMBackendService#jobs "qiskit_ibm_provider.IBMBackendService.jobs") can be used instead. -* Passing a [`QasmQobj`](/api/qiskit/qiskit.qobj.QasmQobj "(in Qiskit v0.45)") and [`PulseQobj`](/api/qiskit/qiskit.qobj.PulseQobj "(in Qiskit v0.45)") in the [`run()`](qiskit_ibm_provider.IBMBackend#run "qiskit_ibm_provider.IBMBackend.run") method has been removed. [`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.45)") and [`Schedule`](/api/qiskit/qiskit.pulse.Schedule "(in Qiskit v0.45)") should now be used instead. +* Passing a [`QasmQobj`](https://docs.quantum.ibm.com/api/qiskit/qiskit.qobj.QasmQobj "(in Qiskit v0.46)") and [`PulseQobj`](https://docs.quantum.ibm.com/api/qiskit/qiskit.qobj.PulseQobj "(in Qiskit v0.46)") in the [`run()`](qiskit_ibm_provider.IBMBackend#run "qiskit_ibm_provider.IBMBackend.run") method has been removed. [`QuantumCircuit`](https://docs.quantum.ibm.com/api/qiskit/qiskit.circuit.QuantumCircuit "(in Qiskit v0.46)") and [`Schedule`](https://docs.quantum.ibm.com/api/qiskit/qiskit.pulse.Schedule "(in Qiskit v0.46)") should now be used instead. * The db\_filter parameter has been removed from [`jobs()`](qiskit_ibm_provider.IBMBackendService#jobs "qiskit_ibm_provider.IBMBackendService.jobs") due to low adoption. diff --git a/public/api/qiskit-ibm-provider/objects.inv b/public/api/qiskit-ibm-provider/objects.inv index 9617b8a774092412f6523174bb9b675a9d20cae6..7c04b467aab0aaaafd4b03b23feda92c1e137983 100644 GIT binary patch delta 3258 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 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_0_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_0_0.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1d0056411bad1a7d1b925f8ddf41e592ef40d8 GIT binary patch literal 57858 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 eD3c0o-(6%02Zcf+7-9n& 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Μ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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d706bcd8ccc52b8e1d721343a3d3ff257fb78de7 GIT binary patch literal 6991 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 V2mQnC*SF3fDvD}|3VE~8{{cq=8?yia literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0bba8ca840162e3d4defa532a450c505c3371b4a GIT binary patch literal 7246 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png new file mode 100644 index 0000000000000000000000000000000000000000..564604cdf099a2093064ca4502acea4efd97764f GIT binary patch literal 11921 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png new file mode 100644 index 0000000000000000000000000000000000000000..63a3f965dabadebec87ce731c6f3ff886547eaec GIT binary patch literal 64192 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 CU!@}e literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8407099dfd344712a5b030d579f35eea0fd3be2b GIT binary patch literal 3565 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e87d3dcf96bc005b494d9cde980823444622c16c GIT binary patch literal 21200 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e87d3dcf96bc005b494d9cde980823444622c16c GIT binary patch literal 21200 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0a84a5a6a209e3b4a8aa3628da4a2dd70059c901 GIT binary patch literal 11208 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

?V_KWo!*yct&fmYw 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b49de395a7fbf27526cde67289d4af0337a075c8 GIT binary patch literal 7598 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png b/public/images/api/qiskit-ibm-provider/0.7/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png new file mode 100644 index 0000000000000000000000000000000000000000..05b2bcbb8bf6e6b57a7931d0f22b3ecc69f3b2bd GIT binary patch literal 9282 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 eD3c0o-(6%02Zcf+7-9n& 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Μ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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d706bcd8ccc52b8e1d721343a3d3ff257fb78de7 GIT binary patch literal 6991 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 V2mQnC*SF3fDvD}|3VE~8{{cq=8?yia literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0bba8ca840162e3d4defa532a450c505c3371b4a GIT binary patch literal 7246 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png new file mode 100644 index 0000000000000000000000000000000000000000..564604cdf099a2093064ca4502acea4efd97764f GIT binary patch literal 11921 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 CU!@}e literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8407099dfd344712a5b030d579f35eea0fd3be2b GIT binary patch literal 3565 zcmc(iX)s({yT^ANQ-o+b!qH|Yh=?|itrIgLM9d<_ByP)>_ZA{_FSOJLZm&E(;Sk6951# z`g&S-!I%fOQbv04UL!T)00w1WZ7W|>%p+faNAHKgZAV{EcZ{z)%1HqG(Ax)v@sO2N zl9Z7UaP{@|^ihGsAOCj;NsPA(T;S-m4IJdWr=GPB0I)j#)6Ny%AfUh*ZS=L&%>v$R zPP^SPb9vf9UiLKcNH~wanbDtX%Tum?%QNqyscV6hjdi?!d(nV|VPK%^vxM^~!tSn9NdHxKN;VYkN0Y%Ez>1++d#?8J$p?HrP{tK(z{tS7n0E>-_ zOHN7(&&?G;9IoV#)p-dA1qIzPGo#fu+5XkAg;p~>3=0u&J3I{HO3>Mu`2w>j=D2$G zDi;@5bGBM=c@PCHr=UOsEcIp;Z{D0P$F(BxaoS?G=}HSHF1J#D81?Mx-3}P*5;l$Q zi*&6T-(Gxa{1si}M0$U_+)ARbxHw`M-QJs}>b1~z-ptZc)8taYyLTux+qB2H*?5C6 z58{^nsq$X3VC%17)MIh)%13iGzt^`ZioDzj{jx~tLKF+Ee{k@r-}=aWmjBEXBLb|x ztgeo0b#>KKi3cASrx_4X7bWc17v384^twnSJwx6DxBdRDmkaM5jt&h&{3dH&%^R zDCAOac5Duezh!m{nOJ-~%Z9Z_7+InHv9J&TB|-%~}A6XpvetxfuONN=gcVxF9Vn3$-Zr>n5qPF>1Mc z1>=5`P+P?5Q*}e8J>qvCMFF!ZVNsDQEv$cd^uRbco@Hck*Dg_FAi+UF0D!~cglFt6 zEa)?P=(CKXsnmelQRf;Puid4dioRS!8lfq>X&i1_M?r+{@W;-XuR|ARdEr~pdfmui zNoVEtT90#i_9+iPe-+h;kB!yP)n!;)TPt^HdFuGvTH9Es~ z?l;O%gH(xgQWZIcVoaW%lkoX1Lasv>f3(r?#^D_MhqFC3tb2D`H`lb7L2{aLBo`DK z;j`T9*dEKl$i$>!Y6=w+5-P{cBHt)^(O8z*(MeTkPMJBh<;CkA?;iQpd7r=u=r=}B zme0ON0%146l#k9CBxMRkX7qhtbgrFbW7g!d-S3E zJxZT_SEJXx;}j3>(Vnf5ErygHd6${wDm{)Je3A zFJ(^%AxB$wjHM)c6hEt0|B{Bokcm1!+n?0TKb`%p&Q0X1l-3Ix&AL3Mzu<>9i(}oqL;eZ#fn%vaW*KaAk-+(xL(U!yARA&9KD-BNE`Pp?2 z$W+9P1js=dYX1kvk!}|0(;h^{*^obgm94GlVYD_5r}p*hSFrB6v^4MG&(6c z`AK{{vlXc1-!sAAzI|)H0B_8t^cQr1@4dafoBNP{ytR1l&m$ohE)sJ`T9fF(r9CPf5`v1Vw$0jYXK5Dfk<1CI|1Ie35v zyHHp16YtpAFjbAmmzGLu>F5YuxkA^6*kxwAaAAIHt8ARw8)}}YPJohx`M6CZDHKY; z;VQvvbE1ZS+R`+TTRw$AKB3TW%>K=uHOf}Xc zIA?NK^%-3)5=!$-K)&yhx? zUwpvEm^9EF%W=&t5dze2;#Mku7gm1EZc@!R+Wk3hDhaPG8-2be4qfWLH`iM(_rp}s zt|{bC0Av;Qn9bKQ|3*a}zh!L{;P7R9W2AoK9!3x$F;o($Hvj!B(fHZe@Gu?lTIOMA zoy6?)^hMy9SmdK*KZ~c0;DaBd+Y3n-1h*5{N9t=zb9!Q1is7YRZgwS9GyMGgJP_X7 z+v{cB)Ih|CeUY!O{xo0m8_7coQEw5fBaN=_9G*6Oms#>Fj3MIBMCIiPsS+t04FAjc7wzKUete3p;Bq5jP*GS`+aO~b9*TAxo>y4w0Dw=S7LIQ_NUp6l`XBf?a`9eu8 zpWL*A^$ncK#q?mdphv9y{(*J`(p6C29lkP0GsY;?suCiWyzC>0#bPfW{aB?0{UahL zC#S~Hhwa0~V!|jlHz*2)a*o}u8MQP0eJ&um@4oeUR#xJ2PT2DoFW46s7jtWCIayd( zws&_m?d+2&zjS+8GdI$U8&bK zot%W0y3_x7`CV=efoRjhm4>T@1tp`D$bD37oc%BV)!XhU^rfBzlF3acm&mxm8yc6Pi6 zCMLw0=_3k1d|=mLB$J8!aiF;lOirrGZBo`pZaX&a4H^^{7T)wMXDCZG`BRfe*WBD(&&Y@`7OX!j8ylM> zT$ez4+tf6ZUjdGrUs%X^fm5>Wt!8x6t5=HyJ3}3iD{L@W9GK(V$=kPYzm|5Ur=g(% z{Z4J|ve(*B(LXF0M)OXHE6B?WDkxxGZ9o#Pk_bOK5@0`$9H!omtG5{63=VF<$HuaY zywqnDY@3_Qb#-%tc};-8l*S$IIT~9iJf2t_JY-^Gic+(VdH$R)sIt<3%Z^O_kr=nt zbY#>N@xW41?X!VX_aa?JpB)O1fQh< literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_3_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e87d3dcf96bc005b494d9cde980823444622c16c GIT binary patch literal 21200 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_4_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e87d3dcf96bc005b494d9cde980823444622c16c GIT binary patch literal 21200 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_5_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0a84a5a6a209e3b4a8aa3628da4a2dd70059c901 GIT binary patch literal 11208 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

?V_KWo!*yct&fmYw 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_6_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b49de395a7fbf27526cde67289d4af0337a075c8 GIT binary patch literal 7598 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 literal 0 HcmV?d00001 diff --git a/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png b/public/images/api/qiskit-ibm-provider/0.8/qiskit_ibm_provider.transpiler.passes.scheduling_9_0.png new file mode 100644 index 0000000000000000000000000000000000000000..05b2bcbb8bf6e6b57a7931d0f22b3ecc69f3b2bd GIT binary patch literal 9282 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Μ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 diff --git a/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png b/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_12_0.png index d706bcd8ccc52b8e1d721343a3d3ff257fb78de7..b0feb040d777ca928a52b485edd48b345dfea549 100644 GIT binary patch literal 7004 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Μ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 literal 6991 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 V2mQnC*SF3fDvD}|3VE~8{{cq=8?yia diff --git a/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png b/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_13_0.png index 0bba8ca840162e3d4defa532a450c505c3371b4a..d706bcd8ccc52b8e1d721343a3d3ff257fb78de7 100644 GIT binary patch literal 6991 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 V2mQnC*SF3fDvD}|3VE~8{{cq=8?yia literal 7246 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 diff --git a/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png b/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_15_0.png index 564604cdf099a2093064ca4502acea4efd97764f..8045542cd23f02b62761341f2ebd9b37bc727389 100644 GIT binary patch literal 18297 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 literal 11921 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 diff --git a/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png b/public/images/api/qiskit-ibm-provider/qiskit_ibm_provider.transpiler.passes.scheduling_1_0.png index 63a3f965dabadebec87ce731c6f3ff886547eaec..5f1b4d4662671c12bda5682c47689ab86fa0235c 100644 GIT binary patch literal 57845 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