diff --git a/qiskit_ibm_runtime/base_primitive.py b/qiskit_ibm_runtime/base_primitive.py index 9c5dd10e1..2b5090b2f 100644 --- a/qiskit_ibm_runtime/base_primitive.py +++ b/qiskit_ibm_runtime/base_primitive.py @@ -29,6 +29,7 @@ from .runtime_job import RuntimeJob from .ibm_backend import IBMBackend from .utils.default_session import get_cm_session +from .utils.deprecation import issue_deprecation_msg from .utils.utils import validate_isa_circuits from .constants import DEFAULT_DECODERS from .qiskit_runtime_service import QiskitRuntimeService @@ -122,6 +123,12 @@ def __init__( raise ValueError( "A backend or session must be specified when not using ibm_cloud channel." ) + issue_deprecation_msg( + "Not providing a backend is deprecated", + "0.21.0", + "Passing in a backend will be required, please provide a backend.", + 3, + ) # Check if initialized within a IBMBackend session. If so, issue a warning. if get_cm_provider_session(): warnings.warn( diff --git a/qiskit_ibm_runtime/session.py b/qiskit_ibm_runtime/session.py index 1c2520059..3019ac8cc 100644 --- a/qiskit_ibm_runtime/session.py +++ b/qiskit_ibm_runtime/session.py @@ -21,7 +21,7 @@ from .utils.result_decoder import ResultDecoder from .ibm_backend import IBMBackend from .utils.default_session import set_cm_session -from .utils.deprecation import deprecate_arguments +from .utils.deprecation import deprecate_arguments, issue_deprecation_msg from .utils.converters import hms_to_seconds @@ -112,8 +112,14 @@ def __init__( else: self._service = service - if self._service.channel == "ibm_quantum" and not backend: - raise ValueError('"backend" is required for ``ibm_quantum`` channel.') + if not backend: + if self._service.channel == "ibm_quantum": + raise ValueError('"backend" is required for ``ibm_quantum`` channel.') + issue_deprecation_msg( + "Not providing a backend is deprecated", + "0.21.0", + "Passing in a backend will be required, please provide a backend.", + ) self._instance = None diff --git a/releasenotes/notes/require-cloud-backend-38a74144347c735d.yaml b/releasenotes/notes/require-cloud-backend-38a74144347c735d.yaml new file mode 100644 index 000000000..9326e4323 --- /dev/null +++ b/releasenotes/notes/require-cloud-backend-38a74144347c735d.yaml @@ -0,0 +1,10 @@ +--- +deprecations: + - | + In a future release, ``backend`` will be a required parameter for :class:`qiskit_ibm_runtime.Sampler`, and + :class:`qiskit_ibm_runtime.Estimator` if ``session`` is not specified, + even when using the ``ibm_cloud`` channel. + + It will also be a required parameter for + :class:`qiskit_ibm_runtime.Session` and + :class:`qiskit_ibm_runtime.Batch`. diff --git a/test/unit/test_session.py b/test/unit/test_session.py index b2b84fbd2..1f7bc9768 100644 --- a/test/unit/test_session.py +++ b/test/unit/test_session.py @@ -44,6 +44,13 @@ def test_missing_backend(self): with self.assertRaises(ValueError): Session(service=service) + def test_missing_backend_cloud_warning(self): + """Test warning if no backend provided on cloud channel.""" + service = MagicMock() + service.channel = "ibm_cloud" + with self.assertWarns(DeprecationWarning): + Session(service=service) + def test_passing_ibm_backend(self): """Test passing in IBMBackend instance.""" backend = MagicMock(spec=IBMBackend)