diff --git a/azure-quantum/azure/quantum/qiskit/backends/backend.py b/azure-quantum/azure/quantum/qiskit/backends/backend.py index b650b5ed..c4ff34e4 100644 --- a/azure-quantum/azure/quantum/qiskit/backends/backend.py +++ b/azure-quantum/azure/quantum/qiskit/backends/backend.py @@ -10,7 +10,7 @@ logger = logging.getLogger(__name__) -from typing import Any, Dict, Tuple, Union, List, Optional +from typing import TYPE_CHECKING, Any, Dict, Union, List, Optional from azure.quantum.version import __version__ from azure.quantum.qiskit.job import ( MICROSOFT_OUTPUT_DATA_FORMAT, @@ -20,11 +20,13 @@ from abc import abstractmethod from azure.quantum.job.session import SessionHost +if TYPE_CHECKING: + from azure.quantum.qiskit import AzureQuantumProvider + try: from qiskit import QuantumCircuit from qiskit.providers import BackendV1 as Backend from qiskit.providers import Options - from qiskit.providers import Provider from qiskit.providers.models import BackendConfiguration from qiskit.qobj import QasmQobj, PulseQobj import pyqir as pyqir @@ -81,7 +83,7 @@ class AzureBackendBase(Backend, SessionHost): def __init__( self, configuration: BackendConfiguration, - provider: Provider = None, + provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) @@ -304,7 +306,7 @@ def _get_azure_provider_id(self) -> str: class AzureQirBackend(AzureBackendBase): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) @@ -528,7 +530,7 @@ class AzureBackend(AzureBackendBase): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) diff --git a/azure-quantum/azure/quantum/qiskit/backends/ionq.py b/azure-quantum/azure/quantum/qiskit/backends/ionq.py index 13f58a92..42ca17b9 100644 --- a/azure-quantum/azure/quantum/qiskit/backends/ionq.py +++ b/azure-quantum/azure/quantum/qiskit/backends/ionq.py @@ -17,7 +17,7 @@ ) from qiskit.providers.models import BackendConfiguration -from qiskit.providers import Options, Provider +from qiskit.providers import Options from qiskit_ionq.helpers import ( GATESET_MAP, @@ -57,7 +57,7 @@ class IonQQirBackendBase(AzureQirBackend): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) @@ -201,7 +201,7 @@ class IonQBackend(AzureBackend): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) diff --git a/azure-quantum/azure/quantum/qiskit/backends/qci.py b/azure-quantum/azure/quantum/qiskit/backends/qci.py index 076f2f74..b2e82e89 100644 --- a/azure-quantum/azure/quantum/qiskit/backends/qci.py +++ b/azure-quantum/azure/quantum/qiskit/backends/qci.py @@ -13,7 +13,7 @@ ) from qiskit.providers.models import BackendConfiguration -from qiskit.providers import Options, Provider +from qiskit.providers import Options from qsharp import TargetProfile @@ -35,7 +35,7 @@ class QCIBackend(AzureQirBackend): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) diff --git a/azure-quantum/azure/quantum/qiskit/backends/quantinuum.py b/azure-quantum/azure/quantum/qiskit/backends/quantinuum.py index 1ebe4c5e..3a5b4c71 100644 --- a/azure-quantum/azure/quantum/qiskit/backends/quantinuum.py +++ b/azure-quantum/azure/quantum/qiskit/backends/quantinuum.py @@ -3,8 +3,7 @@ # Licensed under the MIT License. ## -from typing import Dict, List, Union -from azure.quantum.qiskit.job import AzureQuantumJob +from typing import TYPE_CHECKING, Dict from azure.quantum.version import __version__ import warnings @@ -13,13 +12,15 @@ from qiskit import QuantumCircuit from qiskit.providers.models import BackendConfiguration from qiskit.providers import Options -from qiskit.providers import Provider from qiskit.qasm2 import dumps from qsharp import TargetProfile import logging logger = logging.getLogger(__name__) +if TYPE_CHECKING: + from azure.quantum.qiskit import AzureQuantumProvider + __all__ = [ "QuantinuumSyntaxCheckerBackend", "QuantinuumEmulatorBackend", @@ -72,7 +73,7 @@ class QuantinuumQirBackendBase(AzureQirBackend): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) @@ -216,7 +217,7 @@ class QuantinuumBackend(AzureBackend): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) diff --git a/azure-quantum/azure/quantum/qiskit/backends/rigetti.py b/azure-quantum/azure/quantum/qiskit/backends/rigetti.py index 47656bb5..af36878b 100644 --- a/azure-quantum/azure/quantum/qiskit/backends/rigetti.py +++ b/azure-quantum/azure/quantum/qiskit/backends/rigetti.py @@ -10,7 +10,7 @@ from .backend import AzureQirBackend from qiskit.providers.models import BackendConfiguration -from qiskit.providers import Options, Provider +from qiskit.providers import Options from qsharp import TargetProfile if TYPE_CHECKING: @@ -32,7 +32,7 @@ class RigettiBackend(AzureQirBackend): @abstractmethod def __init__( - self, configuration: BackendConfiguration, provider: Provider = None, **fields + self, configuration: BackendConfiguration, provider: "AzureQuantumProvider" = None, **fields ): super().__init__(configuration, provider, **fields) diff --git a/azure-quantum/azure/quantum/qiskit/provider.py b/azure-quantum/azure/quantum/qiskit/provider.py index 79fcaf24..17c22f70 100644 --- a/azure-quantum/azure/quantum/qiskit/provider.py +++ b/azure-quantum/azure/quantum/qiskit/provider.py @@ -5,8 +5,9 @@ import warnings import inspect -from itertools import groupby from typing import Dict, List, Optional, Tuple, Type + +from abc import ABC from azure.quantum import Workspace try: @@ -26,7 +27,7 @@ QISKIT_USER_AGENT = "azure-quantum-qiskit" -class AzureQuantumProvider(Provider): +class AzureQuantumProvider(ABC): def __init__(self, workspace: Optional[Workspace]=None, **kwargs): """Class for interfacing with the Azure Quantum service @@ -281,3 +282,9 @@ def _filter_backends( backends = list(filter(filters, backends)) return backends + + def __eq__(self, other): + """ + Equality comparison. + """ + return type(self).__name__ == type(other).__name__ diff --git a/azure-quantum/tests/unit/test_session.py b/azure-quantum/tests/unit/test_session.py index 94f51c34..9dff32f6 100644 --- a/azure-quantum/tests/unit/test_session.py +++ b/azure-quantum/tests/unit/test_session.py @@ -420,7 +420,7 @@ def _azure_config(self) -> Dict[str, str]: def __init__(self, name: str, - provider: AzureQuantumProvider, + provider: "AzureQuantumProvider", **kwargs): super().__init__(name=name, provider=provider) self._provider_id = ECHO_PROVIDER_NAME