28
28
from .circuits import CircuitsManager
29
29
from .ibmqbackend import IBMQBackend , IBMQSimulator
30
30
from .credentials import Credentials
31
+ from .providerbackends import ProviderBackends
31
32
32
33
33
34
logger = logging .getLogger (__name__ )
@@ -39,6 +40,11 @@ class AccountProvider(BaseProvider):
39
40
def __init__ (self , credentials : Credentials , access_token : str ) -> None :
40
41
"""Return a new AccountProvider.
41
42
43
+ The ``provider_backends`` attribute can be used to autocomplete
44
+ backend names, by pressing ``tab`` after
45
+ ``AccountProvider.provider_backends.``. Note that this feature may
46
+ not be available if an error occurs during backend discovery.
47
+
42
48
Args:
43
49
credentials (Credentials): IBM Q Experience credentials.
44
50
access_token (str): access token for IBM Q Experience.
@@ -58,10 +64,13 @@ def __init__(self, credentials: Credentials, access_token: str) -> None:
58
64
# access.
59
65
self ._backends = None
60
66
67
+ self .provider_backends = ProviderBackends (self )
68
+
61
69
def backends (
62
70
self ,
63
71
name : Optional [str ] = None ,
64
72
filters : Optional [Callable [[List [IBMQBackend ]], bool ]] = None ,
73
+ timeout : Optional [float ] = None ,
65
74
** kwargs : Dict
66
75
) -> List [IBMQBackend ]:
67
76
"""Return all backends accessible via this provider, subject to optional filtering.
@@ -71,6 +80,7 @@ def backends(
71
80
filters (callable): more complex filters, such as lambda functions
72
81
e.g. AccountProvider.backends(
73
82
filters=lambda b: b.configuration['n_qubits'] > 5)
83
+ timeout (float or None): number of seconds to wait for backend discovery.
74
84
kwargs: simple filters specifying a true/false criteria in the
75
85
backend configuration or backend status or provider credentials
76
86
e.g. AccountProvider.backends(n_qubits=5, operational=True)
@@ -80,7 +90,7 @@ def backends(
80
90
"""
81
91
# pylint: disable=arguments-differ
82
92
if self ._backends is None :
83
- self ._backends = self ._discover_remote_backends ()
93
+ self ._backends = self ._discover_remote_backends (timeout = timeout )
84
94
85
95
backends = self ._backends .values ()
86
96
@@ -94,15 +104,18 @@ def backends(
94
104
95
105
return filter_backends (backends , filters = filters , ** kwargs )
96
106
97
- def _discover_remote_backends (self ) -> Dict [str , IBMQBackend ]:
107
+ def _discover_remote_backends (self , timeout : Optional [ float ] = None ) -> Dict [str , IBMQBackend ]:
98
108
"""Return the remote backends available.
99
109
110
+ Args:
111
+ timeout (float or None): number of seconds to wait for the discovery.
112
+
100
113
Returns:
101
114
dict[str:IBMQBackend]: a dict of the remote backend instances,
102
115
keyed by backend name.
103
116
"""
104
117
ret = OrderedDict ()
105
- configs_list = self ._api .available_backends ()
118
+ configs_list = self ._api .available_backends (timeout = timeout )
106
119
for raw_config in configs_list :
107
120
# Make sure the raw_config is of proper type
108
121
if not isinstance (raw_config , dict ):
0 commit comments