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