Skip to content

Commit 5ccf425

Browse files
Add QuantumInstance/Backend to algorithm init (qiskit-community/qiskit-aqua#874)
* Add QuantumInstance/Backend to algorithm init * make pylintrc the same as terra's
1 parent 83a8b39 commit 5ccf425

File tree

6 files changed

+48
-21
lines changed

6 files changed

+48
-21
lines changed

qiskit/aqua/algorithms/amplitude_amplifiers/grover.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
The Grover's Search algorithm.
1616
"""
1717

18-
from typing import Optional
18+
from typing import Optional, Union
1919
import logging
2020
import operator
2121
import numpy as np
2222

2323
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
2424
from qiskit.qasm import pi
25+
from qiskit.providers import BaseBackend
2526

26-
from qiskit.aqua import AquaError
27+
from qiskit.aqua import QuantumInstance, AquaError
2728
from qiskit.aqua.utils import get_subsystem_density_matrix
2829
from qiskit.aqua.utils.validation import validate_min, validate_in_set
2930
from qiskit.aqua.algorithms import QuantumAlgorithm
@@ -76,9 +77,12 @@ class Grover(QuantumAlgorithm):
7677
and be used with Grover algorithm to find a satisfiable assignment.
7778
"""
7879

79-
def __init__(self, oracle: Oracle, init_state: Optional[InitialState] = None,
80-
incremental: bool = False, num_iterations: int = 1,
81-
mct_mode: str = 'basic') -> None:
80+
def __init__(self,
81+
oracle: Oracle, init_state: Optional[InitialState] = None,
82+
incremental: bool = False,
83+
num_iterations: int = 1,
84+
mct_mode: str = 'basic',
85+
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
8286
r"""
8387
Args:
8488
oracle: The oracle component
@@ -98,6 +102,7 @@ def __init__(self, oracle: Oracle, init_state: Optional[InitialState] = None,
98102
repeated to amplify the amplitude(s) of the target(s). Has a minimum value of 1.
99103
mct_mode: Multi-Control Toffoli mode ('basic' | 'basic-dirty-ancilla' |
100104
'advanced' | 'noancilla')
105+
quantum_instance: Quantum Instance or Backend
101106
102107
Raises:
103108
AquaError: evaluate_classically() missing from the input oracle
@@ -106,7 +111,7 @@ def __init__(self, oracle: Oracle, init_state: Optional[InitialState] = None,
106111
validate_in_set('mct_mode', mct_mode,
107112
{'basic', 'basic-dirty-ancilla',
108113
'advanced', 'noancilla'})
109-
super().__init__()
114+
super().__init__(quantum_instance)
110115

111116
if not callable(getattr(oracle, "evaluate_classically", None)):
112117
raise AquaError(

qiskit/aqua/algorithms/factorizers/shor.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@
1717
Quantum Information and Computation, Vol. 3, No. 2 (2003) pp. 175-185
1818
"""
1919

20+
from typing import Optional, Union
2021
import math
2122
import array
2223
import fractions
2324
import logging
2425
import numpy as np
2526

2627
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
27-
28+
from qiskit.providers import BaseBackend
29+
from qiskit.aqua import QuantumInstance
2830
from qiskit.aqua.utils.arithmetic import is_power
2931
from qiskit.aqua.utils import get_subsystem_density_matrix
3032
from qiskit.aqua.algorithms import QuantumAlgorithm
@@ -54,17 +56,21 @@ class Shor(QuantumAlgorithm):
5456
See also https://arxiv.org/abs/quant-ph/0205095
5557
"""
5658

57-
def __init__(self, N: int = 15, a: int = 2) -> None:
59+
def __init__(self,
60+
N: int = 15,
61+
a: int = 2,
62+
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
5863
"""
5964
Args:
6065
N: The integer to be factored, has a min. value of 3.
6166
a: A random integer that satisfies a < N and gcd(a, N) = 1, has a min. value of 2.
67+
quantum_instance: Quantum Instance or Backend
6268
Raises:
6369
ValueError: Invalid input
6470
"""
6571
validate_min('N', N, 3)
6672
validate_min('a', a, 2)
67-
super().__init__()
73+
super().__init__(quantum_instance)
6874
self._n = None
6975
self._up_qreg = None
7076
self._down_qreg = None

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414

1515
""" The Quantum Approximate Optimization Algorithm. """
1616

17-
from typing import List, Callable, Optional
17+
from typing import List, Callable, Optional, Union
1818
import logging
1919
import numpy as np
20+
21+
from qiskit.providers import BaseBackend
22+
from qiskit.aqua import QuantumInstance
2023
from qiskit.aqua.operators import BaseOperator
2124
from qiskit.aqua.components.initial_states import InitialState
2225
from qiskit.aqua.components.optimizers import Optimizer
@@ -64,7 +67,8 @@ def __init__(self, operator: BaseOperator = None, optimizer: Optimizer = None, p
6467
mixer: Optional[BaseOperator] = None, initial_point: Optional[np.ndarray] = None,
6568
max_evals_grouped: int = 1, aux_operators: Optional[List[BaseOperator]] = None,
6669
callback: Optional[Callable[[int, np.ndarray, float, float], None]] = None,
67-
auto_conversion: bool = True) -> None:
70+
auto_conversion: bool = True,
71+
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
6872
"""
6973
Args:
7074
operator: Qubit operator
@@ -101,6 +105,7 @@ def __init__(self, operator: BaseOperator = None, optimizer: Optimizer = None, p
101105
:class:`~qiskit.aqua.operators.WeightedPauliOperator`
102106
- for *qasm simulator or real backend:*
103107
:class:`~qiskit.aqua.operators.TPBGroupedWeightedPauliOperator`
108+
quantum_instance: Quantum Instance or Backend
104109
"""
105110
validate_min('p', p, 1)
106111

@@ -112,7 +117,8 @@ def __init__(self, operator: BaseOperator = None, optimizer: Optimizer = None, p
112117
# will cause the var form to be built
113118
super().__init__(operator, None, optimizer, initial_point=initial_point,
114119
max_evals_grouped=max_evals_grouped, aux_operators=aux_operators,
115-
callback=callback, auto_conversion=auto_conversion)
120+
callback=callback, auto_conversion=auto_conversion,
121+
quantum_instance=quantum_instance)
116122

117123
@VQE.operator.setter
118124
def operator(self, operator: BaseOperator) -> None:

qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
See https://arxiv.org/abs/1304.3061
1919
"""
2020

21-
from typing import Optional, List, Callable
21+
from typing import Optional, List, Callable, Union
2222
import logging
2323
import functools
2424
import warnings
@@ -27,8 +27,8 @@
2727
import numpy as np
2828
from qiskit import ClassicalRegister, QuantumCircuit
2929
from qiskit.circuit import ParameterVector
30-
31-
from qiskit.aqua import AquaError
30+
from qiskit.providers import BaseBackend
31+
from qiskit.aqua import QuantumInstance, AquaError
3232
from qiskit.aqua.operators import (TPBGroupedWeightedPauliOperator, WeightedPauliOperator,
3333
MatrixOperator, op_converter)
3434
from qiskit.aqua.utils.backend_utils import (is_statevector_backend,
@@ -89,7 +89,8 @@ def __init__(self,
8989
max_evals_grouped: int = 1,
9090
aux_operators: Optional[List[BaseOperator]] = None,
9191
callback: Optional[Callable[[int, np.ndarray, float, float], None]] = None,
92-
auto_conversion: bool = True) -> None:
92+
auto_conversion: bool = True,
93+
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
9394
"""
9495
9596
Args:
@@ -124,6 +125,7 @@ def __init__(self,
124125
:class:`~qiskit.aqua.operators.WeightedPauliOperator`
125126
- for *qasm simulator or real backend:*
126127
:class:`~qiskit.aqua.operators.TPBGroupedWeightedPauliOperator`
128+
quantum_instance: Quantum Instance or Backend
127129
"""
128130
validate_min('max_evals_grouped', max_evals_grouped, 1)
129131

@@ -146,7 +148,8 @@ def __init__(self,
146148
super().__init__(var_form=var_form,
147149
optimizer=optimizer,
148150
cost_fn=self._energy_evaluation,
149-
initial_point=initial_point)
151+
initial_point=initial_point,
152+
quantum_instance=quantum_instance)
150153

151154
self._in_operator = None
152155
self._operator = None

qiskit/aqua/algorithms/quantum_algorithm.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@ class QuantumAlgorithm(ABC):
3434
use an exception if a component of the module is available.
3535
"""
3636
@abstractmethod
37-
def __init__(self) -> None:
37+
def __init__(self,
38+
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]]) -> None:
3839
self._quantum_instance = None
40+
if quantum_instance:
41+
self.quantum_instance = quantum_instance
3942

4043
@property
4144
def random(self):

qiskit/aqua/algorithms/vq_algorithm.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
overridden to opt-out of this infrastructure but still meet the interface requirements.
2323
"""
2424

25-
from typing import Optional, Callable
25+
from typing import Optional, Callable, Union
2626
import time
2727
import logging
2828
import warnings
2929
from abc import abstractmethod
3030
import numpy as np
3131

32+
from qiskit.providers import BaseBackend
33+
from qiskit.aqua import QuantumInstance
3234
from qiskit.aqua.algorithms import AlgorithmResult, QuantumAlgorithm
3335
from qiskit.aqua.components.optimizers import Optimizer
3436
from qiskit.aqua.components.variational_forms import VariationalForm
@@ -46,7 +48,8 @@ def __init__(self,
4648
var_form: VariationalForm,
4749
optimizer: Optimizer,
4850
cost_fn: Optional[Callable] = None,
49-
initial_point: Optional[np.ndarray] = None) -> None:
51+
initial_point: Optional[np.ndarray] = None,
52+
quantum_instance: Optional[Union[QuantumInstance, BaseBackend]] = None) -> None:
5053
"""
5154
Args:
5255
var_form: An optional parameterized variational form (ansatz).
@@ -55,10 +58,11 @@ def __init__(self,
5558
supplied on :meth:`find_minimum`.
5659
initial_point: An optional initial point (i.e. initial parameter values)
5760
for the optimizer.
61+
quantum_instance: Quantum Instance or Backend
5862
Raises:
5963
ValueError: for invalid input
6064
"""
61-
super().__init__()
65+
super().__init__(quantum_instance)
6266

6367
self._var_form = var_form
6468
self._optimizer = optimizer

0 commit comments

Comments
 (0)