Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 27 additions & 6 deletions qiskit_ibm_runtime/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +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


Expand Down Expand Up @@ -282,25 +284,44 @@ def service(self) -> QiskitRuntimeService:
def from_id(
cls,
session_id: str,
service: Optional[QiskitRuntimeService] = None,
service: QiskitRuntimeService,
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 can be an already
session_id: the id of the session to be created. This must 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``

"""
session = cls(service, backend)
session._session_id = session_id
return session

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.")

def __enter__(self) -> "Session":
set_cm_session(self)
Expand Down
6 changes: 6 additions & 0 deletions releasenotes/notes/from-id-params-659a2adb727b9d18.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
fixes:
- |
The ``backend`` parameter in :meth:`~qiskit_ibm_runtime.Session.from_id` is being deprecated because
sessions do not support multiple backends. Additionally, the `service` parameter is no longer optional.

17 changes: 9 additions & 8 deletions test/integration/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
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
Expand Down Expand Up @@ -90,16 +91,16 @@ def test_using_correct_instance(self, service):

@run_integration_test
def test_session_from_id(self, service):
"""Test creating a session from a given id"""
"""Test creating a session with from_id with simulator."""
backend = service.backend("ibmq_qasm_simulator")
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)
session = Session(service=service, backend=backend)

sampler = Sampler(session=session)
job = sampler.run(ReferenceCircuits.bell(), shots=400)
self.assertEqual(session_id, job.session_id)
session_id = job.session_id

with self.assertRaises(IBMInputValueError):
_ = Session.from_id(session_id=session_id, service=service)


class TestBackendRunInSession(IBMIntegrationTestCase):
Expand Down