Skip to content

Commit 870b5fe

Browse files
fix: more progress on delayed imports
1 parent c8e3c77 commit 870b5fe

File tree

5 files changed

+55
-29
lines changed

5 files changed

+55
-29
lines changed

mpqp/execution/connection/aws_connection.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import os
22
from typing import TYPE_CHECKING, Any
33

4-
import pkg_resources
54
from termcolor import colored
65
from typeguard import typechecked
76

@@ -113,9 +112,6 @@ def get_braket_device(device: AWSDevice, is_noisy: bool = False) -> "BraketDevic
113112
ResultType(name='Probability', observables=None, minShots=10, maxShots=100000)]
114113
115114
"""
116-
import boto3
117-
from botocore.exceptions import NoRegionError
118-
from braket.aws import AwsDevice, AwsSession
119115
from braket.devices import LocalSimulator
120116

121117
if not device.is_remote():
@@ -124,6 +120,11 @@ def get_braket_device(device: AWSDevice, is_noisy: bool = False) -> "BraketDevic
124120
else:
125121
return LocalSimulator()
126122

123+
import boto3
124+
import pkg_resources
125+
from botocore.exceptions import NoRegionError
126+
from braket.aws import AwsDevice, AwsSession
127+
127128
try:
128129
braket_client = boto3.client("braket", region_name=device.get_region())
129130
aws_session = AwsSession(braket_client=braket_client)

mpqp/execution/connection/ibm_connection.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
from getpass import getpass
22
from typing import TYPE_CHECKING
33

4-
from qiskit_ibm_provider import IBMProvider
5-
from qiskit_ibm_provider.accounts import AccountNotFoundError
6-
from qiskit_ibm_provider.api.exceptions import RequestsApiError
74
from termcolor import colored
85
from typeguard import typechecked
96

107
if TYPE_CHECKING:
8+
from qiskit_ibm_provider import IBMProvider
119
from qiskit.providers.backend import BackendV1
1210
from qiskit_ibm_runtime import QiskitRuntimeService
1311

@@ -29,6 +27,7 @@ def config_ibm_account(token: str):
2927
Raises:
3028
IBMRemoteExecutionError
3129
"""
30+
from qiskit_ibm_provider import IBMProvider
3231

3332
try:
3433
IBMProvider.save_account(token=token, overwrite=True)
@@ -77,6 +76,9 @@ def test_connection() -> bool:
7776
Returns:
7877
``False`` if login failed.
7978
"""
79+
from qiskit_ibm_provider import IBMProvider
80+
from qiskit_ibm_provider.api.exceptions import RequestsApiError
81+
8082
try:
8183
IBMProvider()
8284
except RequestsApiError as err:
@@ -88,7 +90,7 @@ def test_connection() -> bool:
8890
return True
8991

9092

91-
def get_IBMProvider() -> IBMProvider:
93+
def get_IBMProvider() -> "IBMProvider":
9294
"""Returns the IBMProvider needed to get one or several backends for
9395
execution.
9496
@@ -108,6 +110,10 @@ def get_IBMProvider() -> IBMProvider:
108110
<IBMBackend('ibm_osaka')>]
109111
110112
"""
113+
from qiskit_ibm_provider import IBMProvider
114+
from qiskit_ibm_provider.accounts import AccountNotFoundError
115+
from qiskit_ibm_provider.api.exceptions import RequestsApiError
116+
111117
global Ibm_Provider
112118
if Ibm_Provider is None:
113119
if get_env_variable("IBM_CONFIGURED") == "False":

mpqp/execution/job.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@
2424
if TYPE_CHECKING:
2525
from enum import Enum
2626

27-
from braket.aws import AwsQuantumTask
28-
from qat.comm.qlmaas.ttypes import JobStatus as QLM_JobStatus
29-
from qat.comm.qlmaas.ttypes import QLMServiceException
30-
from qiskit.providers import JobStatus as IBM_JobStatus
31-
3227
from mpqp.core.instruction.measurement import BasisMeasure, ExpectationMeasure, Measure
3328

3429
from ..core.circuit import QCircuit
@@ -171,6 +166,9 @@ def get_qlm_job_status(job_id: str) -> JobStatus:
171166
Args:
172167
job_id: Id of the job for which we want to retrieve the status.
173168
"""
169+
from qat.comm.qlmaas.ttypes import JobStatus as QLM_JobStatus
170+
from qat.comm.qlmaas.ttypes import QLMServiceException
171+
174172
try:
175173
qlm_status = get_QLMaaSConnection().get_status(job_id)
176174
except QLMServiceException as e:
@@ -203,6 +201,8 @@ def get_ibm_job_status(job_id: str) -> JobStatus:
203201
Args:
204202
job_id: Id of the job for which we want to retrieve the status.
205203
"""
204+
from qiskit.providers import JobStatus as IBM_JobStatus
205+
206206
# test with QiskitRuntimeService
207207
if job_id in [e.job_id() for e in get_QiskitRuntimeService().jobs()]:
208208
ibm_job = get_QiskitRuntimeService().job(job_id)
@@ -237,6 +237,8 @@ def get_aws_job_status(job_id: str) -> JobStatus:
237237
Args:
238238
job_id: Id of the job for which we want to retrieve the status.
239239
"""
240+
from braket.aws import AwsQuantumTask
241+
240242
task = AwsQuantumTask(job_id)
241243
state = task.state()
242244
if state == "FAILED":

mpqp/execution/providers/ibm.py

+29-15
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,14 @@
33
import math
44
from typing import TYPE_CHECKING, Optional
55

6-
from qiskit import QuantumCircuit
7-
from qiskit.compiler import transpile
8-
from qiskit.primitives import BackendEstimator
9-
from qiskit.primitives import Estimator as Qiskit_Estimator
10-
from qiskit.primitives import EstimatorResult, SamplerResult
11-
from qiskit.providers import BackendV1, BackendV2
12-
from qiskit.providers import JobStatus as IBM_JobStatus
13-
from qiskit.quantum_info import Operator
14-
from qiskit.result import Result as QiskitResult
15-
from qiskit_aer import Aer, AerSimulator
16-
from qiskit_ibm_provider.job import IBMJob
17-
from qiskit_ibm_runtime import Estimator as Runtime_Estimator
18-
from qiskit_ibm_runtime import RuntimeJob
19-
from qiskit_ibm_runtime import Sampler as Runtime_Sampler
20-
from qiskit_ibm_runtime import Session
6+
if TYPE_CHECKING:
7+
from qiskit import QuantumCircuit
8+
from qiskit.primitives import EstimatorResult, SamplerResult
9+
from qiskit.providers import BackendV1, BackendV2
10+
from qiskit.result import Result as QiskitResult
11+
from qiskit_ibm_provider.job import IBMJob
12+
from qiskit_ibm_runtime import RuntimeJob
13+
2114
from typeguard import typechecked
2215

2316
from mpqp.core.circuit import QCircuit
@@ -71,6 +64,10 @@ def compute_expectation_value(
7164
This function is not meant to be used directly, please use
7265
:func:``run<mpqp.execution.runner.run>`` instead.
7366
"""
67+
from qiskit.primitives import BackendEstimator
68+
from qiskit.primitives import Estimator as Qiskit_Estimator
69+
from qiskit.quantum_info import Operator
70+
7471
if not isinstance(job.measure, ExpectationMeasure):
7572
raise ValueError(
7673
"Cannot compute expectation value if measure used in job is not of "
@@ -159,6 +156,10 @@ def run_aer(job: Job):
159156
This function is not meant to be used directly, please use
160157
:func:``run<mpqp.execution.runner.run>`` instead.
161158
"""
159+
from qiskit import QuantumCircuit
160+
from qiskit.compiler import transpile
161+
from qiskit_aer import Aer, AerSimulator
162+
162163
qiskit_circuit = (
163164
job.circuit.without_measurements().to_other_language(Language.QISKIT)
164165
if (job.job_type == JobType.STATE_VECTOR)
@@ -225,6 +226,12 @@ def submit_ibmq(job: Job) -> tuple[str, RuntimeJob | IBMJob]:
225226
This function is not meant to be used directly, please use
226227
:func:``run<mpqp.execution.runner.run>`` instead.
227228
"""
229+
from qiskit import QuantumCircuit
230+
from qiskit.quantum_info import Operator
231+
from qiskit_ibm_runtime import Estimator as Runtime_Estimator
232+
from qiskit_ibm_runtime import Sampler as Runtime_Sampler
233+
from qiskit_ibm_runtime import Session
234+
228235
if job.job_type == JobType.STATE_VECTOR:
229236
raise DeviceJobIncompatibleError(
230237
"State vector cannot be computed using IBM remote simulators and"
@@ -317,6 +324,9 @@ def extract_result(
317324
Returns:
318325
The ``qiskit`` result converted to our format.
319326
"""
327+
from qiskit.primitives import EstimatorResult, SamplerResult
328+
from qiskit.result import Result as QiskitResult
329+
from qiskit_ibm_runtime import RuntimeJob
320330

321331
if job is not None and (
322332
isinstance(result, EstimatorResult) != (job.job_type == JobType.OBSERVABLE)
@@ -436,9 +446,13 @@ def get_result_from_ibm_job_id(job_id: str) -> Result:
436446
Returns:
437447
The result converted to our format.
438448
"""
449+
from qiskit.providers import BackendV1, BackendV2
450+
from qiskit.providers import JobStatus as IBM_JobStatus
451+
439452
# search for job id in the connector given in parameter first
440453
# if not found, try with IBMProvider, then QiskitRuntimeService
441454
# if not found, raise an error
455+
442456
connector = get_IBMProvider()
443457
ibm_job = (
444458
connector.retrieve_job(job_id)

mpqp/execution/result.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
import numpy as np
3030
import numpy.typing as npt
31-
from matplotlib import pyplot as plt
3231
from typeguard import typechecked
3332

3433
from mpqp.execution.devices import AvailableDevice
@@ -412,6 +411,8 @@ def plot(self, show: bool = True):
412411
show: ``plt.show()`` is only executed if ``show``, useful to batch
413412
plots.
414413
"""
414+
from matplotlib import pyplot as plt
415+
415416
if show:
416417
plt.figure()
417418

@@ -532,6 +533,8 @@ def plot(self, show: bool = True):
532533
show: ``plt.show()`` is only executed if ``show``, useful to batch
533534
plots.
534535
"""
536+
from matplotlib import pyplot as plt
537+
535538
n_cols = math.ceil((len(self.results) + 1) // 2)
536539
n_rows = math.ceil(len(self.results) / n_cols)
537540

0 commit comments

Comments
 (0)