Skip to content

Commit 9377725

Browse files
Add support for v2 provider interface (qiskit-community/qiskit-aqua#1270)
* Add support for v2 provider interface In Qiskit#5086 the v2 provider interface is being added. This starter interface is basically a drop in replacement for the v1 interface with 3 changes it's explicitly versioned at the object level, Backend.run() can take in a circuit object, and Job objects can also be async or sync. Eventually the interace will likely evolve towards a model similar to what was initially done in Qiskit#4885. This commit adds initial support for v2 provider backend objects, the explicit type checking for BaseBackend objects is blocking the terra PR from moving forward (because it switched BasicAer to use the v2 interface). This initial support just means accepting v2 Backend objects in addition to v1 BaseBackend objects. Depends on Qiskit#5086 * Fix import path * fix style Co-authored-by: Manoel Marques <[email protected]>
1 parent 6f14cd6 commit 9377725

File tree

6 files changed

+29
-15
lines changed

6 files changed

+29
-15
lines changed

qiskit/aqua/algorithms/amplitude_amplifiers/grover.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
from qiskit import ClassicalRegister, QuantumCircuit
2222
from qiskit.circuit.library import GroverOperator
23+
from qiskit.providers import Backend
2324
from qiskit.providers import BaseBackend
2425
from qiskit.quantum_info import Statevector
2526

@@ -121,7 +122,7 @@ class Grover(QuantumAlgorithm):
121122
('post_processing', {float: 'lam'}),
122123
('grover_operator', {list: 'rotation_counts'}),
123124
('quantum_instance', {str: 'mct_mode'}),
124-
('incremental', {(BaseBackend, QuantumInstance): 'quantum_instance'})
125+
('incremental', {(Backend, BaseBackend, QuantumInstance): 'quantum_instance'})
125126
], skip=1) # skip the argument 'self'
126127
def __init__(self,
127128
oracle: Union[Oracle, QuantumCircuit, Statevector],
@@ -131,7 +132,7 @@ def __init__(self,
131132
sample_from_iterations: bool = False,
132133
post_processing: Callable[[List[int]], List[int]] = None,
133134
grover_operator: Optional[QuantumCircuit] = None,
134-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None,
135+
quantum_instance: Optional[Union[QuantumInstance, Backend, BaseBackend]] = None,
135136
init_state: Optional[InitialState] = None,
136137
incremental: bool = False,
137138
num_iterations: Optional[int] = None,

qiskit/aqua/algorithms/factorizers/shor.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from qiskit.circuit import Gate, Instruction, ParameterVector
2424
from qiskit.circuit.library import QFT
2525
from qiskit.providers import BaseBackend
26+
from qiskit.providers import Backend
2627
from qiskit.aqua import QuantumInstance
2728
from qiskit.aqua.algorithms import AlgorithmResult, QuantumAlgorithm
2829
from qiskit.aqua.utils import get_subsystem_density_matrix, summarize_circuits
@@ -53,7 +54,8 @@ class Shor(QuantumAlgorithm):
5354
def __init__(self,
5455
N: int = 15,
5556
a: int = 2,
56-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
57+
quantum_instance: Optional[
58+
Union[QuantumInstance, BaseBackend, Backend]] = None) -> None:
5759
"""
5860
Args:
5961
N: The integer to be factored, has a min. value of 3.

qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import numpy as np
1818

1919
from qiskit.providers import BaseBackend
20+
from qiskit.providers import Backend
2021
from qiskit.aqua import QuantumInstance
2122
from qiskit.aqua.operators import OperatorBase, ExpectationBase, LegacyBaseOperator
2223
from qiskit.aqua.components.initial_states import InitialState
@@ -74,7 +75,8 @@ def __init__(self,
7475
aux_operators: Optional[List[Optional[Union[OperatorBase, LegacyBaseOperator]]]] =
7576
None,
7677
callback: Optional[Callable[[int, np.ndarray, float, float], None]] = None,
77-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
78+
quantum_instance: Optional[
79+
Union[QuantumInstance, BaseBackend, Backend]] = None) -> None:
7880
"""
7981
Args:
8082
operator: Qubit operator

qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from qiskit.circuit import Parameter
2626
from qiskit.circuit.library import RealAmplitudes
2727
from qiskit.providers import BaseBackend
28+
from qiskit.providers import Backend
2829
from qiskit.aqua import QuantumInstance, AquaError
2930
from qiskit.aqua.algorithms import QuantumAlgorithm
3031
from qiskit.aqua.operators import (OperatorBase, ExpectationBase, ExpectationFactory, StateFn,
@@ -96,7 +97,8 @@ def __init__(self,
9697
aux_operators: Optional[List[Optional[Union[OperatorBase,
9798
LegacyBaseOperator]]]] = None,
9899
callback: Optional[Callable[[int, np.ndarray, float, float], None]] = None,
99-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
100+
quantum_instance: Optional[
101+
Union[QuantumInstance, BaseBackend, Backend]] = None) -> None:
100102
"""
101103
102104
Args:
@@ -200,7 +202,8 @@ def _set_expectation(self, exp: ExpectationBase) -> None:
200202
self._expect_op = None
201203

202204
@QuantumAlgorithm.quantum_instance.setter
203-
def quantum_instance(self, quantum_instance: Union[QuantumInstance, BaseBackend]) -> None:
205+
def quantum_instance(self, quantum_instance: Union[QuantumInstance,
206+
BaseBackend, Backend]) -> None:
204207
""" set quantum_instance """
205208
super(VQE, self.__class__).quantum_instance.__set__(self, quantum_instance)
206209

qiskit/aqua/algorithms/quantum_algorithm.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class in this module.
2121
from abc import ABC, abstractmethod
2222
from typing import Union, Dict, Optional
2323
from qiskit.providers import BaseBackend
24+
from qiskit.providers.backend import Backend
2425
from qiskit.aqua import aqua_globals, QuantumInstance, AquaError
2526

2627

@@ -33,7 +34,8 @@ class QuantumAlgorithm(ABC):
3334
"""
3435
@abstractmethod
3536
def __init__(self,
36-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]]) -> None:
37+
quantum_instance: Optional[
38+
Union[QuantumInstance, Backend, BaseBackend, Backend]]) -> None:
3739
self._quantum_instance = None
3840
if quantum_instance:
3941
self.quantum_instance = quantum_instance
@@ -44,7 +46,8 @@ def random(self):
4446
return aqua_globals.random
4547

4648
def run(self,
47-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None,
49+
quantum_instance: Optional[
50+
Union[QuantumInstance, Backend, BaseBackend]] = None,
4851
**kwargs) -> Dict:
4952
"""Execute the algorithm with selected backend.
5053
@@ -59,7 +62,7 @@ def run(self,
5962
if quantum_instance is None and self.quantum_instance is None:
6063
raise AquaError("Quantum device or backend "
6164
"is needed since you are running quantum algorithm.")
62-
if isinstance(quantum_instance, BaseBackend):
65+
if isinstance(quantum_instance, (BaseBackend, Backend)):
6366
self.set_backend(quantum_instance, **kwargs)
6467
else:
6568
if quantum_instance is not None:
@@ -77,23 +80,24 @@ def quantum_instance(self) -> Optional[QuantumInstance]:
7780
return self._quantum_instance
7881

7982
@quantum_instance.setter
80-
def quantum_instance(self, quantum_instance: Union[QuantumInstance, BaseBackend]) -> None:
83+
def quantum_instance(self, quantum_instance: Union[QuantumInstance,
84+
BaseBackend, Backend]) -> None:
8185
""" Sets quantum instance. """
82-
if isinstance(quantum_instance, BaseBackend):
86+
if isinstance(quantum_instance, (BaseBackend, Backend)):
8387
quantum_instance = QuantumInstance(quantum_instance)
8488
self._quantum_instance = quantum_instance
8589

86-
def set_backend(self, backend: BaseBackend, **kwargs) -> None:
90+
def set_backend(self, backend: Union[Backend, BaseBackend], **kwargs) -> None:
8791
""" Sets backend with configuration. """
8892
self.quantum_instance = QuantumInstance(backend)
8993
self.quantum_instance.set_config(**kwargs)
9094

9195
@property
92-
def backend(self) -> BaseBackend:
96+
def backend(self) -> Union[Backend, BaseBackend]:
9397
""" Returns backend. """
9498
return self.quantum_instance.backend
9599

96100
@backend.setter
97-
def backend(self, backend: BaseBackend):
101+
def backend(self, backend: Union[Backend, BaseBackend]):
98102
""" Sets backend without additional configuration. """
99103
self.set_backend(backend)

qiskit/aqua/algorithms/vq_algorithm.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
from qiskit.circuit import QuantumCircuit, ParameterVector
3131
from qiskit.providers import BaseBackend
32+
from qiskit.providers import Backend
3233
from qiskit.aqua import QuantumInstance
3334
from qiskit.aqua.algorithms import AlgorithmResult, QuantumAlgorithm
3435
from qiskit.aqua.components.optimizers import Optimizer, SLSQP
@@ -47,7 +48,8 @@ def __init__(self,
4748
optimizer: Optimizer,
4849
cost_fn: Optional[Callable] = None,
4950
initial_point: Optional[np.ndarray] = None,
50-
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
51+
quantum_instance: Optional[
52+
Union[QuantumInstance, BaseBackend, Backend]] = None) -> None:
5153
"""
5254
Args:
5355
var_form: An optional parameterized variational form (ansatz).

0 commit comments

Comments
 (0)