Source code for qiskit_aqt_provider.aqt_provider

# This code is part of Qiskit.
#
# (C) Copyright Alpine Quantum Technologies GmbH 2023
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0).
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

from types import TracebackType
from typing import TypeAlias

from aqt_connector import ArnicaConfig
from typing_extensions import Self

from qiskit_aqt_provider._cloud.provider import CloudProvider
from qiskit_aqt_provider._cloud.resource import CloudResource
from qiskit_aqt_provider._direct.provider import DirectAccessProvider
from qiskit_aqt_provider._direct.resource import DirectAccessResource
from qiskit_aqt_provider._offline_sim.provider import OfflineSimulatorProvider
from qiskit_aqt_provider._offline_sim.resource import OfflineSimulatorResource

__all__ = ["AQTProvider"]


AnyAQTResource: TypeAlias = CloudResource | OfflineSimulatorResource | DirectAccessResource
"""Type of any resource."""


[docs] class AQTProvider: """Provider for backends from Alpine Quantum Technologies (AQT). Attributes: name (str): The provider's name. offline (OfflineSimulatorProvider): The provider's offline simulator provider. """
[docs] def __init__(self) -> None: """Initialize the AQT provider.""" self.name = "aqt_provider" self._cloud: CloudProvider | None = None self._direct_access: DirectAccessProvider | None = None self.offline = OfflineSimulatorProvider()
[docs] def cloud(self, config: ArnicaConfig | None = None) -> CloudProvider: """The provider's cloud provider instance.""" if self._cloud is None: config = config or ArnicaConfig() self._cloud = CloudProvider(config) return self._cloud
[docs] def direct_access(self) -> DirectAccessProvider: """The provider's direct access provider instance.""" if self._direct_access is None: self._direct_access = DirectAccessProvider() return self._direct_access
def __enter__(self) -> "Self": """Enters the runtime context for this provider.""" return self def __exit__( self, exc_type: type[BaseException] | None, exc: BaseException | None, tb: TracebackType | None, ) -> None: """Exit the context manager and clean up resources.""" if self._cloud is not None: self._cloud.close() self._cloud = None if self._direct_access is not None: self._direct_access.close() self._direct_access = None