diff --git a/qiskit_ibm_runtime/session.py b/qiskit_ibm_runtime/session.py index b48c6e2af..fa043b475 100644 --- a/qiskit_ibm_runtime/session.py +++ b/qiskit_ibm_runtime/session.py @@ -23,9 +23,8 @@ from .runtime_program import ParameterNamespace from .program.result_decoder import ResultDecoder from .ibm_backend import IBMBackend -from .exceptions import IBMInputValueError -from .utils.deprecation import deprecate_arguments from .utils.default_session import set_cm_session +from .utils.deprecation import deprecate_arguments def _active_session(func): # type: ignore @@ -284,44 +283,28 @@ def service(self) -> QiskitRuntimeService: def from_id( cls, session_id: str, - service: QiskitRuntimeService, + service: Optional[QiskitRuntimeService] = None, backend: Optional[Union[str, IBMBackend]] = None, ) -> "Session": """Construct a Session object with a given session_id Args: - session_id: the id of the session to be created. This must be an already + session_id: the id of the session to be created. This can be an already existing session id. service: instance of the ``QiskitRuntimeService`` class. backend: instance of :class:`qiskit_ibm_runtime.IBMBackend` class or string name of backend. - Raises: - IBMInputValueError: If given `session_id` does not exist. or the backend passed in does - not match the original session backend. - Returns: A new Session with the given ``session_id`` - """ + """ if backend: deprecate_arguments("backend", "0.15.0", "Sessions do not support multiple backends.") - if isinstance(backend, IBMBackend): - backend = backend.name - - response = service._api_client.session_details(session_id) - if response: - session_backend = response.get("backend_name") - if backend and backend != session_backend: - raise IBMInputValueError( - f"The session_id {session_id} was created with backend {session_backend}, " - f"but backend {backend} was given." - ) - session = cls(service, session_backend) - session._session_id = session_id - return session - raise IBMInputValueError(f"The session_id {session_id} does not exist.") + session = cls(service, backend) + session._session_id = session_id + return session def __enter__(self) -> "Session": set_cm_session(self) diff --git a/releasenotes/notes/revert-from-id-9b87ea2d948251d6.yaml b/releasenotes/notes/revert-from-id-9b87ea2d948251d6.yaml new file mode 100644 index 000000000..02a46f518 --- /dev/null +++ b/releasenotes/notes/revert-from-id-9b87ea2d948251d6.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Reverting `0.15.0` changes to :meth:`~qiskit_ibm_runtime.Session.from_id` because it was + a breaking change without proper deprecation. + diff --git a/test/integration/test_session.py b/test/integration/test_session.py index 963033de3..b8c086a59 100644 --- a/test/integration/test_session.py +++ b/test/integration/test_session.py @@ -21,7 +21,6 @@ from qiskit.result import Result from qiskit_ibm_runtime import Estimator, Session, Sampler, Options -from qiskit_ibm_runtime.exceptions import IBMInputValueError from ..decorators import run_integration_test, quantum_only from ..ibm_test_case import IBMIntegrationTestCase @@ -91,16 +90,16 @@ def test_using_correct_instance(self, service): @run_integration_test def test_session_from_id(self, service): - """Test creating a session with from_id with simulator.""" + """Test creating a session from a given id""" backend = service.backend("ibmq_qasm_simulator") - session = Session(service=service, backend=backend) - - sampler = Sampler(session=session) + with Session(service, backend=backend) as session: + sampler = Sampler(session=session) + job = sampler.run(ReferenceCircuits.bell(), shots=400) + session_id = job.session_id + new_session = Session.from_id(backend=backend, session_id=session_id) + sampler = Sampler(session=new_session) job = sampler.run(ReferenceCircuits.bell(), shots=400) - session_id = job.session_id - - with self.assertRaises(IBMInputValueError): - _ = Session.from_id(session_id=session_id, service=service) + self.assertEqual(session_id, job.session_id) class TestBackendRunInSession(IBMIntegrationTestCase):