Skip to content

Commit af319b7

Browse files
authored
Deprecate QNNs (#506)
* some deprecations * suppress warnings, more tests * suppress warnings * suppress warnings * more tests * update doc, black * proper deprecations, suppress warnings, more tests * fix mypy, add reno * update reno
1 parent 40f99bb commit af319b7

20 files changed

+831
-11
lines changed

qiskit_machine_learning/algorithms/regressors/vqr.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ def __init__(
9999
``estimator``.
100100
"""
101101
# needed for mypy
102-
neural_network: EstimatorQNN | TwoLayerQNN = None
103102
if quantum_instance is not None and estimator is None:
104103
warn_deprecated(
105104
"0.5.0", DeprecatedType.ARGUMENT, old_name="quantum_instance", new_name="estimator"

qiskit_machine_learning/neural_networks/circuit_qnn.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from qiskit.circuit import Parameter
2424
from qiskit.opflow import Gradient, CircuitSampler, StateFn, OpflowError, OperatorBase
2525
from qiskit.providers import Backend
26-
from qiskit.utils import QuantumInstance
26+
from qiskit.utils import QuantumInstance, deprecate_function
2727

2828
import qiskit_machine_learning.optionals as _optionals
2929
from .sampling_neural_network import SamplingNeuralNetwork
@@ -46,8 +46,16 @@ class SparseArray: # type: ignore
4646

4747

4848
class CircuitQNN(SamplingNeuralNetwork):
49-
"""A sampling neural network based on a given quantum circuit."""
50-
49+
"""Pending deprecation: A sampling neural network based on a given quantum circuit."""
50+
51+
@deprecate_function(
52+
"The CircuitQNN class has been superseded by the "
53+
"qiskit_machine_learning.neural_networks.SamplerQNN "
54+
"This class will be deprecated in a future release and subsequently "
55+
"removed after that.",
56+
stacklevel=3,
57+
category=PendingDeprecationWarning,
58+
)
5159
def __init__(
5260
self,
5361
circuit: QuantumCircuit,

qiskit_machine_learning/neural_networks/opflow_qnn.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
ComposedOp,
2828
)
2929
from qiskit.providers import Backend
30-
from qiskit.utils import QuantumInstance
30+
from qiskit.utils import QuantumInstance, deprecate_function
3131
from qiskit.utils.backend_utils import is_aer_provider
3232
import qiskit_machine_learning.optionals as _optionals
3333
from .neural_network import NeuralNetwork
@@ -50,8 +50,16 @@ class SparseArray: # type: ignore
5050

5151

5252
class OpflowQNN(NeuralNetwork):
53-
"""Opflow Quantum Neural Network."""
54-
53+
"""Pending deprecation: Opflow Quantum Neural Network."""
54+
55+
@deprecate_function(
56+
"The OpflowQNN class has been superseded by the "
57+
"qiskit_machine_learning.neural_networks.EstimatorQNN "
58+
"This class will be deprecated in a future release and subsequently "
59+
"removed after that.",
60+
stacklevel=3,
61+
category=PendingDeprecationWarning,
62+
)
5563
def __init__(
5664
self,
5765
operator: OperatorBase,

qiskit_machine_learning/neural_networks/two_layer_qnn.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,25 @@
1818
from qiskit import QuantumCircuit
1919
from qiskit.opflow import PauliSumOp, StateFn, OperatorBase, ExpectationBase
2020
from qiskit.providers import Backend
21-
from qiskit.utils import QuantumInstance
21+
from qiskit.utils import QuantumInstance, deprecate_function
2222

2323
from .opflow_qnn import OpflowQNN
2424
from ..utils import derive_num_qubits_feature_map_ansatz
2525

2626

2727
class TwoLayerQNN(OpflowQNN):
28-
"""Two Layer Quantum Neural Network consisting of a feature map, a ansatz,
28+
"""Pending deprecation: Two Layer Quantum Neural Network consisting of a feature map, a ansatz,
2929
and an observable.
3030
"""
3131

32+
@deprecate_function(
33+
"The TwoLayerQNN class is pending deprecation and has no direct replacement. Make use of "
34+
"qiskit_machine_learning.neural_networks.EstimatorQNN instead."
35+
"This class will be deprecated in a future release and subsequently "
36+
"removed after that.",
37+
stacklevel=3,
38+
category=PendingDeprecationWarning,
39+
)
3240
def __init__(
3341
self,
3442
num_qubits: int | None = None,
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
deprecations:
3+
- |
4+
Class :class:`qiskit_machine_learning.neural_networks.CircuitQNN` is pending deprecation and
5+
is superseded by :class:`qiskit_machine_learning.neural_networks.SamplerQNN`.
6+
7+
Class :class:`qiskit_machine_learning.neural_networks.OpflowQNN` is pending deprecation and
8+
is superseded by :class:`qiskit_machine_learning.neural_networks.EstimatorQNN`.
9+
10+
Class :class:`qiskit_machine_learning.neural_networks.TwoLayerQNN` is pending deprecation and
11+
has no direct replacement. Please make use of
12+
:class:`qiskit_machine_learning.neural_networks.EstimatorQNN` instead.
13+
14+
These classes will be deprecated in a future release and subsequently removed after that.

releasenotes/notes/pending-deprecate-quantumkernel-cc56523e5e5581bf.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@ deprecations:
44
Class :class:`qiskit_machine_learning.kernels.QuantumKernel` is pending deprecation and
55
is superseded by :class:`qiskit_machine_learning.kernels.FidelityQuantumKernel` and
66
:class:`qiskit_machine_learning.kernels.TrainableFidelityQuantumKernel`.
7+
8+
This class will be deprecated in a future release and subsequently removed after that.

test/algorithms/classifiers/test_neural_network_classifier.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import os
1515
import tempfile
1616
import unittest
17+
import warnings
1718
from typing import Tuple, Optional, Callable
1819

1920
from test import QiskitMachineLearningTestCase
@@ -52,6 +53,7 @@ class TestNeuralNetworkClassifier(QiskitMachineLearningTestCase):
5253
@unittest.skipUnless(optionals.HAS_AER, "qiskit-aer is required to run this test")
5354
def setUp(self):
5455
super().setUp()
56+
warnings.filterwarnings("ignore", category=PendingDeprecationWarning)
5557

5658
# specify quantum instances
5759
algorithm_globals.random_seed = 12345
@@ -69,6 +71,10 @@ def setUp(self):
6971
seed_transpiler=algorithm_globals.random_seed,
7072
)
7173

74+
def tearDown(self) -> None:
75+
super().tearDown()
76+
warnings.filterwarnings("always", category=PendingDeprecationWarning)
77+
7278
def _create_optimizer(self, opt: str) -> Optional[Optimizer]:
7379
if opt == "bfgs":
7480
optimizer = L_BFGS_B(maxiter=5)

0 commit comments

Comments
 (0)