diff --git a/qiskit_ibm_runtime/session.py b/qiskit_ibm_runtime/session.py index 5ee1ddcbf5..13f3a2bd90 100644 --- a/qiskit_ibm_runtime/session.py +++ b/qiskit_ibm_runtime/session.py @@ -211,6 +211,19 @@ def service(self) -> QiskitRuntimeService: """ return self._service + @classmethod + def from_id( + cls, + session_id: str, + service: Optional[QiskitRuntimeService] = None, + backend: Optional[Union[str, IBMBackend]] = None, + max_time: Optional[Union[int, str]] = None, + ) -> "Session": + """Construct a Session object with a given session_id""" + session = cls(service, backend, max_time) + session._session_id = session_id + return session + def __enter__(self) -> "Session": set_cm_session(self) return self diff --git a/releasenotes/notes/from_id-23fc85f3fbf01e0b.yaml b/releasenotes/notes/from_id-23fc85f3fbf01e0b.yaml new file mode 100644 index 0000000000..7e61ea5a51 --- /dev/null +++ b/releasenotes/notes/from_id-23fc85f3fbf01e0b.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Added new method ``Session.from_id`` which creates a new session with a given id. + + diff --git a/test/integration/test_session.py b/test/integration/test_session.py index cc3277bdae..87cff66250 100644 --- a/test/integration/test_session.py +++ b/test/integration/test_session.py @@ -84,3 +84,18 @@ def test_using_correct_instance(self, service): job = sampler.run(ReferenceCircuits.bell(), shots=400) self.assertEqual(instance, backend._instance) self.assertEqual(instance, job.backend()._instance) + + @run_integration_test + def test_session_from_id(self, service): + """Test creating a session from a given id""" + instance = self.dependencies.instance + backend = service.backend("ibmq_qasm_simulator", instance=instance) + with Session(service, backend=backend) as session: + sampler = Sampler(session=session) + job = sampler.run(ReferenceCircuits.bell(), shots=400) + session_id = job.session_id + session.close() + new_session = Session.from_id(backend=backend, session_id=session_id) + sampler = Sampler(session=new_session) + job = sampler.run(ReferenceCircuits.bell(), shots=400) + self.assertEqual(session_id, job.session_id) diff --git a/test/unit/test_session.py b/test/unit/test_session.py index 5727b466d0..514c707ef4 100644 --- a/test/unit/test_session.py +++ b/test/unit/test_session.py @@ -154,3 +154,11 @@ def test_global_service(self): service=FakeRuntimeService(channel="ibm_quantum", token="uvw"), backend="ibm_gotham" ) as session: self.assertEqual(session._service._account.token, "uvw") + + def test_session_from_id(self): + """Create session with given session_id""" + service = MagicMock() + session_id = "123" + session = Session.from_id(session_id=session_id, service=service) + session.run(program_id="foo", inputs={}) + self.assertEqual(session.session_id, session_id)