diff --git a/qiskit/providers/backend_compat.py b/qiskit/providers/backend_compat.py index 6971f8b8328b..3c17c3ad5b70 100644 --- a/qiskit/providers/backend_compat.py +++ b/qiskit/providers/backend_compat.py @@ -25,6 +25,7 @@ from qiskit.providers.models.pulsedefaults import PulseDefaults from qiskit.providers.options import Options from qiskit.providers.exceptions import BackendPropertyError +from qiskit.utils import deprecate_func from qiskit.utils.deprecate_pulse import deprecate_pulse_arg, deprecate_pulse_dependency @@ -368,6 +369,12 @@ class should only be used if you need a :class:`~.BackendV2` and still need ) """ + @deprecate_func( + since="1.4", + removal_timeline="in the 2.0 release", + additional_msg="Since ``BackendV1`` is deprecated, this conversion tool from BackendV1 to " + "BackendV2 is going to be removed with BackendV1.", + ) def __init__( self, backend: BackendV1, diff --git a/releasenotes/notes/deprecate_BackendV2Converter-7fdbe7d9dad1b5df.yaml b/releasenotes/notes/deprecate_BackendV2Converter-7fdbe7d9dad1b5df.yaml new file mode 100644 index 000000000000..68d75055b7e3 --- /dev/null +++ b/releasenotes/notes/deprecate_BackendV2Converter-7fdbe7d9dad1b5df.yaml @@ -0,0 +1,4 @@ +--- +deprecations_providers: + - | + With the deprecation of ``BackendV1``, the tool for converting ``BackendV1`` to ``BackendV2`` is now deprecated. diff --git a/test/python/compiler/test_transpiler.py b/test/python/compiler/test_transpiler.py index 851c6817d82f..e8faf7d3eb66 100644 --- a/test/python/compiler/test_transpiler.py +++ b/test/python/compiler/test_transpiler.py @@ -1621,6 +1621,7 @@ def test_scheduling_instruction_constraints_backend(self): with self.assertWarns(DeprecationWarning): backend_v1 = Fake27QPulseV1() backend_v2 = BackendV2Converter(backend_v1) + qc = QuantumCircuit(2) qc.h(0) qc.delay(500, 1, "dt") diff --git a/test/python/providers/test_fake_backends.py b/test/python/providers/test_fake_backends.py index c03c31e55c65..7a8e124bfe5c 100644 --- a/test/python/providers/test_fake_backends.py +++ b/test/python/providers/test_fake_backends.py @@ -237,8 +237,8 @@ def test_delay_circuit(self): @data(0, 1, 2, 3) def test_converter(self, opt_level): with self.assertWarns(DeprecationWarning): - backend = Fake5QV1() - backend_v2 = BackendV2Converter(backend) + backend_v1 = Fake5QV1() + backend_v2 = BackendV2Converter(backend_v1) self.assertIsInstance(backend_v2, BackendV2) res = transpile(self.circuit, backend_v2, optimization_level=opt_level) job = backend_v2.run(res) @@ -259,7 +259,8 @@ def test_converter_delay_circuit(self): "min_length": 1, "pulse_alignment": 1, } - backend_v2 = BackendV2Converter(backend, add_delay=True) + with self.assertWarns(DeprecationWarning): + backend_v2 = BackendV2Converter(backend, add_delay=True) self.assertIsInstance(backend_v2, BackendV2) qc = QuantumCircuit(2) qc.delay(502, 0, unit="ns") @@ -278,8 +279,9 @@ def test_converter_with_missing_gate_property(self): # Since gate property is not provided, the gate broadcasts to all qubits as ideal instruction. del backend._properties._gates["u2"] - # This should not raise error - backend_v2 = BackendV2Converter(backend, add_delay=True) + with self.assertWarns(DeprecationWarning): + # This should not raise error + backend_v2 = BackendV2Converter(backend, add_delay=True) self.assertDictEqual(backend_v2.target["u2"], {None: None}) def test_non_cx_tests(self): @@ -552,9 +554,10 @@ def test_filter_faulty_qubits_backend_v2_converter(self): "value": 0, } props_dict["qubits"][i].append(non_operational) + with self.assertWarns(DeprecationWarning): backend._properties = BackendProperties.from_dict(props_dict) - v2_backend = BackendV2Converter(backend, filter_faulty=True) + v2_backend = BackendV2Converter(backend, filter_faulty=True) for i in range(62, 67): for qarg in v2_backend.target.qargs: self.assertNotIn(i, qarg) @@ -577,7 +580,7 @@ def test_filter_faulty_qubits_backend_v2_converter_with_delay(self): props_dict["qubits"][i].append(non_operational) with self.assertWarns(DeprecationWarning): backend._properties = BackendProperties.from_dict(props_dict) - v2_backend = BackendV2Converter(backend, filter_faulty=True, add_delay=True) + v2_backend = BackendV2Converter(backend, filter_faulty=True, add_delay=True) for i in range(62, 67): for qarg in v2_backend.target.qargs: self.assertNotIn(i, qarg) @@ -606,23 +609,24 @@ def test_backend_v2_converter_without_delay(self): (4, 3), } with self.assertWarns(DeprecationWarning): - backend = Fake5QV1() - backend = BackendV2Converter(backend=backend, filter_faulty=True, add_delay=False) + backend_v1 = Fake5QV1() + backend_v2 = BackendV2Converter(backend=backend_v1, filter_faulty=True, add_delay=False) - self.assertEqual(backend.target.qargs, expected) + self.assertEqual(backend_v2.target.qargs, expected) def test_backend_v2_converter_with_meaningless_gate_config(self): """Test backend with broken gate config can be converted only with properties data.""" with self.assertWarns(DeprecationWarning): backend_v1 = Fake5QV1() + backend_v1.configuration().gates = [ GateConfig(name="NotValidGate", parameters=[], qasm_def="not_valid_gate") ] - backend_v2 = BackendV2Converter( - backend=backend_v1, - filter_faulty=True, - add_delay=False, - ) + backend_v2 = BackendV2Converter( + backend=backend_v1, + filter_faulty=True, + add_delay=False, + ) ops_with_measure = backend_v2.target.operation_names self.assertCountEqual( ops_with_measure, @@ -667,7 +671,7 @@ def test_filter_faulty_qubits_and_gates_backend_v2_converter(self): with self.assertWarns(DeprecationWarning): backend._properties = BackendProperties.from_dict(props_dict) - v2_backend = BackendV2Converter(backend, filter_faulty=True) + v2_backend = BackendV2Converter(backend, filter_faulty=True) for i in range(62, 67): for qarg in v2_backend.target.qargs: self.assertNotIn(i, qarg) @@ -704,7 +708,7 @@ def test_filter_faulty_gates_v2_converter(self): with self.assertWarns(DeprecationWarning): backend._properties = BackendProperties.from_dict(props_dict) - v2_backend = BackendV2Converter(backend, filter_faulty=True) + v2_backend = BackendV2Converter(backend, filter_faulty=True) for i in range(62, 67): self.assertIn((i,), v2_backend.target.qargs) for edge in invalid_cx_edges: @@ -735,7 +739,7 @@ def test_faulty_full_path_transpile_connected_cmap(self, opt_level): gate["parameters"].append(non_operational_gate) with self.assertWarns(DeprecationWarning): backend._properties = BackendProperties.from_dict(props) - v2_backend = BackendV2Converter(backend, filter_faulty=True) + v2_backend = BackendV2Converter(backend, filter_faulty=True) qc = QuantumCircuit(5) for x, y in itertools.product(range(5), range(5)): if x == y: