Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 8f15c79

Browse files
authored
Update uses of FakeBackends to be compatible with 0.45 and 1.0 (#808)
* Update uses of FakeBackends to be compatible with 0.45 and 1.0 * Update import path
1 parent 3883d77 commit 8f15c79

16 files changed

+103
-76
lines changed

qiskit_ibm_provider/jupyter/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
:hide-output:
3535
3636
from qiskit_ibm_provider.test.ibm_provider_mock import mock_get_backend
37-
mock_get_backend('FakeVigo')
37+
mock_get_backend('Fake1Q')
3838
3939
.. jupyter-execute::
4040
@@ -71,8 +71,8 @@
7171
if "ipykernel" in sys.modules:
7272

7373
from IPython import get_ipython # pylint: disable=import-error
74+
from qiskit.providers import BackendV2
7475
from .dashboard.dashboard import IBMDashboardMagic
75-
from qiskit.providers.fake_provider.fake_backend import FakeBackendV2 as FakeBackend
7676
from ..ibm_backend import IBMBackend
7777
from .backend_info import backend_widget
7878

@@ -82,4 +82,4 @@
8282
HTML_FORMATTER = _IP.display_formatter.formatters["text/html"]
8383
# Make backend_widget the html repr for IBM Quantum backends
8484
HTML_FORMATTER.for_type(IBMBackend, backend_widget)
85-
HTML_FORMATTER.for_type(FakeBackend, backend_widget)
85+
HTML_FORMATTER.for_type(BackendV2, backend_widget)

qiskit_ibm_provider/jupyter/backend_info.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414
"""Interactive backend widget."""
1515

1616
import threading
17-
from typing import Union
1817

1918
import ipyvuetify as vue
2019
from IPython.display import display # pylint: disable=import-error
21-
from qiskit.providers.fake_provider.fake_backend import FakeBackendV2 as FakeBackend
22-
20+
from qiskit.providers import BackendV2
2321
from qiskit_ibm_provider.ibm_backend import IBMBackend
2422
from .config_widget import config_tab
2523
from .gates_widget import gates_tab
@@ -29,9 +27,7 @@
2927
from ..utils.hgp import to_instance_format
3028

3129

32-
def _async_job_loader(
33-
tab: vue.TabItem, backend: Union[IBMBackend, FakeBackend]
34-
) -> None:
30+
def _async_job_loader(tab: vue.TabItem, backend: BackendV2) -> None:
3531
"""Asynchronous job loader.
3632
3733
Args:
@@ -41,18 +37,19 @@ def _async_job_loader(
4137
tab.children = [jobs_tab(backend)]
4238

4339

44-
def backend_widget(backend: Union[IBMBackend, FakeBackend]) -> None:
40+
def backend_widget(backend: BackendV2) -> None:
4541
"""Display backend information as a widget.
4642
4743
Args:
4844
backend: Display information about this backend.
4945
"""
5046
vue.theme.dark = False
51-
if isinstance(backend, FakeBackend):
47+
if isinstance(backend, IBMBackend):
48+
instance = backend._api_client._params.instance
49+
else:
50+
# fake backend
5251
cred = backend._credentials
5352
instance = to_instance_format(cred.hub, cred.group, cred.project)
54-
else:
55-
instance = backend._api_client._params.instance
5653
last_tab = vue.TabItem(children=[])
5754
card = vue.Card(
5855
height=600,

qiskit_ibm_provider/jupyter/config_widget.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,12 @@
1313

1414
"""Widget for the backend configuration tab."""
1515

16-
from typing import Union
17-
1816
import ipywidgets as wid
19-
from qiskit.providers.fake_provider.fake_backend import FakeBackendV2 as FakeBackend
20-
21-
from qiskit_ibm_provider.ibm_backend import IBMBackend
17+
from qiskit.providers import BackendV2
2218
from qiskit_ibm_provider.visualization.interactive import iplot_gate_map
2319

2420

25-
def config_tab(backend: Union[IBMBackend, FakeBackend]) -> wid.GridBox:
21+
def config_tab(backend: BackendV2) -> wid.GridBox:
2622
"""The backend configuration widget.
2723
2824
Args:

qiskit_ibm_provider/jupyter/gates_widget.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,12 @@
1414
"""Widget for backend gates tab."""
1515

1616
import math
17-
from typing import Union
1817

1918
import ipywidgets as wid
20-
from qiskit.providers.fake_provider.fake_backend import FakeBackendV2 as FakeBackend
19+
from qiskit.providers import BackendV2
2120

22-
from qiskit_ibm_provider.ibm_backend import IBMBackend
2321

24-
25-
def gates_tab(backend: Union[IBMBackend, FakeBackend]) -> wid.GridBox:
22+
def gates_tab(backend: BackendV2) -> wid.GridBox:
2623
"""Construct the multiple qubit gate error widget.
2724
2825
Args:

qiskit_ibm_provider/jupyter/jobs_widget.py

+4-8
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@
1414
"""Interactive Jobs widget."""
1515

1616
import datetime
17-
from typing import Any, Union
17+
from typing import Any
1818

1919
import ipywidgets as wid
2020
import plotly.graph_objects as go
21-
from qiskit.providers.fake_provider.fake_backend import FakeBackendV2 as FakeBackend
22-
23-
from ..ibm_backend import IBMBackend
21+
from qiskit.providers import BackendV2
2422
from ..visualization.interactive.plotly_wrapper import PlotlyWidget
2523

2624
MONTH_NAMES = {
@@ -104,9 +102,7 @@ def _job_table_builder(sel_dict: dict) -> str:
104102
return table_html
105103

106104

107-
def _job_summary(
108-
backend: Union[IBMBackend, FakeBackend], **kwargs: Any
109-
) -> PlotlyWidget:
105+
def _job_summary(backend: BackendV2, **kwargs: Any) -> PlotlyWidget:
110106
"""Interactive jobs summary for a backend.
111107
112108
Args:
@@ -280,7 +276,7 @@ def callback(trace, selection, _): # pylint: disable=unused-argument
280276
return sun_wid
281277

282278

283-
def jobs_tab(backend: Union[IBMBackend, FakeBackend], **kwargs: Any) -> wid.HBox:
279+
def jobs_tab(backend: BackendV2, **kwargs: Any) -> wid.HBox:
284280
"""Construct a widget containing job information for an input backend.
285281
286282
Args:

qiskit_ibm_provider/jupyter/qubits_widget.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,11 @@
1313

1414
"""Widget for qubit properties tab."""
1515

16-
from typing import Union
17-
1816
import ipywidgets as wid
19-
from qiskit.providers.fake_provider.fake_backend import FakeBackendV2 as FakeBackend
20-
21-
from qiskit_ibm_provider.ibm_backend import IBMBackend
17+
from qiskit.providers import BackendV2
2218

2319

24-
def qubits_tab(backend: Union[IBMBackend, FakeBackend]) -> wid.VBox:
20+
def qubits_tab(backend: BackendV2) -> wid.VBox:
2521
"""The qubit properties widget.
2622
2723
Args:

qiskit_ibm_provider/test/ibm_provider_mock.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This code is part of Qiskit.
22
#
3-
# (C) Copyright IBM 2021.
3+
# (C) Copyright IBM 2021, 2024.
44
#
55
# This code is licensed under the Apache License, Version 2.0. You may
66
# obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -14,7 +14,7 @@
1414

1515
from unittest.mock import MagicMock
1616

17-
from qiskit.test import mock as backend_mocks
17+
from qiskit.providers import fake_provider as backend_mocks
1818

1919
import qiskit_ibm_provider
2020

@@ -29,15 +29,18 @@ def mock_get_backend(backend):
2929
value to qiskit_ibm_provider.IBMProvider after you finish using your mock.
3030
Args:
3131
backend (str): The class name as a string for the fake device to
32-
return. For example, FakeVigo.
32+
return. For example, Fake1Q.
3333
Raises:
3434
NameError: If the specified value of backend
3535
"""
36+
print(backend_mocks)
3637
mock_ibm_provider = MagicMock()
3738
if not hasattr(backend_mocks, backend):
3839
raise NameError(
39-
"The specified backend name is not a valid mock from " "qiskit.test.mock"
40+
"The specified backend name is not a valid backend from "
41+
"qiskit.providers.fake_provider"
4042
)
43+
print(backend_mocks, backend, getattr(backend_mocks, backend))
4144
fake_backend = getattr(backend_mocks, backend)()
4245
mock_ibm_provider.get_backend.return_value = fake_backend
4346
mock_ibm_provider.return_value = mock_ibm_provider

qiskit_ibm_provider/transpiler/passes/scheduling/__init__.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@
3232
Below we demonstrate how to schedule and pad a teleportation circuit with delays
3333
for a dynamic circuit backend's execution model:
3434
35+
.. jupyter-execute::
36+
:hide-code:
37+
:hide-output:
38+
39+
import warnings
40+
warnings.filterwarnings("ignore", category=DeprecationWarning)
41+
3542
.. jupyter-execute::
3643
3744
from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister
@@ -41,10 +48,13 @@
4148
from qiskit_ibm_provider.transpiler.passes.scheduling import DynamicCircuitInstructionDurations
4249
from qiskit_ibm_provider.transpiler.passes.scheduling import ALAPScheduleAnalysis
4350
from qiskit_ibm_provider.transpiler.passes.scheduling import PadDelay
44-
from qiskit.providers.fake_provider import FakeJakarta
51+
try:
52+
from qiskit.providers.fake_provider import Fake7QPulseV1
53+
except ImportError:
54+
from qiskit.providers.fake_provider import FakeJakarta as Fake7QPulseV1
4555
4656
47-
backend = FakeJakarta()
57+
backend = Fake7QPulseV1()
4858
4959
# Temporary workaround for mock backends. For real backends this is not required.
5060
backend.configuration().basis_gates.append("if_else")

qiskit_ibm_provider/visualization/interactive/error_map.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,20 @@ def iplot_error_map(
6060
:hide-output:
6161
6262
from qiskit_ibm_provider.test.ibm_provider_mock import mock_get_backend
63-
mock_get_backend('FakeVigo')
63+
# Generate a mock provider for the sake of this example.
64+
# This line will allow the mocked ``IBMProvider`` to return
65+
# a fake backend in the following cell.
66+
mock_get_backend('FakeOpenPulse2Q')
6467
6568
.. jupyter-execute::
6669
6770
from qiskit_ibm_provider import IBMProvider
6871
from qiskit_ibm_provider.visualization import iplot_error_map
6972
7073
provider = IBMProvider(group='open', project='main')
71-
backend = provider.get_backend('ibmq_vigo')
74+
# Note that this is a mock provider, replace ``FakeOpenPulse2Q``
75+
# with any of the currently available IBM devices.
76+
backend = provider.get_backend('FakeOpenPulse2Q')
7277
7378
iplot_error_map(backend, as_widget=True)
7479
"""

qiskit_ibm_provider/visualization/interactive/gate_map.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,20 @@ def iplot_gate_map(
6464
:hide-output:
6565
6666
from qiskit_ibm_provider.test.ibm_provider_mock import mock_get_backend
67-
mock_get_backend('FakeVigo')
67+
# Generate a mock provider for the sake of this example.
68+
# This line will allow the mocked ``IBMProvider`` to return
69+
# a fake backend in the following cell.
70+
mock_get_backend('FakeOpenPulse2Q')
6871
6972
.. jupyter-execute::
7073
7174
from qiskit_ibm_provider import IBMProvider
7275
from qiskit_ibm_provider.visualization import iplot_gate_map
7376
74-
provider = IBMProvider(group='open', project='main')
75-
backend = provider.get_backend('ibmq_vigo')
77+
provider = IBMProvider(group='open', project='main')
78+
# Note that this is a mock provider, replace ``FakeOpenPulse2Q``
79+
# with any of the currently available IBM devices.
80+
backend = provider.get_backend('FakeOpenPulse2Q')
7681
7782
iplot_gate_map(backend, as_widget=True)
7883
"""

test/fake_account_client.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@
2323
from random import randrange
2424
from typing import Dict, Any
2525

26-
from qiskit.providers.fake_provider.backends.poughkeepsie.fake_poughkeepsie import (
27-
FakePoughkeepsie,
28-
)
26+
try:
27+
from qiskit.providers.fake_provider import Fake20QV1
28+
except ImportError:
29+
from qiskit.providers.fake_provider import FakePoughkeepsie as Fake20QV1
2930

3031
from qiskit_ibm_provider.api.exceptions import (
3132
RequestsApiError,
@@ -452,7 +453,7 @@ def job_final_status(self, job_id, *_args, **_kwargs):
452453

453454
def job_properties(self, *_args, **_kwargs):
454455
"""Return the backend properties of a job."""
455-
props = FakePoughkeepsie().properties().to_dict()
456+
props = Fake20QV1().properties().to_dict()
456457
if self._props_count > 0:
457458
self._props_count -= 1
458459
new_dt = datetime.now() + timedelta(hours=randrange(300))

test/unit/mock/fake_account_client.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@
1515
from datetime import datetime as python_datetime
1616
from typing import List, Dict, Any, Optional
1717

18-
from qiskit.providers.fake_provider.backends.lima.fake_lima import FakeLima
1918
from qiskit.providers.exceptions import QiskitBackendNotFoundError
2019

20+
try:
21+
from qiskit.providers.fake_provider import Fake5QV1
22+
except ImportError:
23+
from qiskit.providers.fake_provider import FakeLima as Fake5QV1
24+
2125

2226
class FakeApiBackend:
2327
"""Fake backend."""
2428

2529
def __init__(self, config_update=None, status_update=None):
26-
fake_backend = FakeLima()
30+
fake_backend = Fake5QV1()
2731
self.properties = fake_backend.properties().to_dict()
2832
self.defaults = fake_backend.defaults().to_dict()
2933

@@ -60,7 +64,7 @@ def __init__(
6064
]
6165
"""
6266
self._hgp = hgp
63-
self._fake_backend = FakeLima()
67+
self._fake_backend = Fake5QV1()
6468
self._backends = []
6569
if not specs:
6670
specs = [{}] * num_backends

0 commit comments

Comments
 (0)