Source code for qiskit_braket_provider.providers.braket_provider

"""Amazon Braket provider."""

import warnings

from braket.aws import AwsDevice
from braket.device_schema.dwave import DwaveDeviceCapabilities
from braket.device_schema.quera import QueraDeviceCapabilities
from braket.device_schema.xanadu import XanaduDeviceCapabilities
from qiskit.providers import ProviderV1

from .braket_backend import BraketAwsBackend, BraketLocalBackend


class BraketProvider(ProviderV1):
    """BraketProvider class for accessing Amazon Braket backends.

    Example:
        >>> provider = BraketProvider()
        >>> backends = provider.backends()
        >>> backends
        [BraketBackend[Aspen-10],
         BraketBackend[Aspen-11],
         BraketBackend[Aspen-8],
         BraketBackend[Aspen-9],
         BraketBackend[Aspen-M-1],
         BraketBackend[IonQ Device],
         BraketBackend[Lucy],
         BraketBackend[SV1],
         BraketBackend[TN1],
         BraketBackend[dm1]]
    """

    def backends(self, name=None, **kwargs):
        if kwargs.get("local"):
            return [
                BraketLocalBackend(name="braket_sv"),
                BraketLocalBackend(name="braket_dm"),
            ]
        names = [name] if name else None
        devices = AwsDevice.get_devices(names=names, **kwargs)
        # filter by supported devices
        # gate models are only supported
        supported_devices = [
            d
            for d in devices
            if not isinstance(
                d.properties,
                (
                    DwaveDeviceCapabilities,
                    XanaduDeviceCapabilities,
                    QueraDeviceCapabilities,
                ),
            )
        ]
        return [
            BraketAwsBackend(
                device=device,
                provider=self,
                name=device.name,
                description=f"AWS Device: {device.provider_name} {device.name}.",
                online_date=device.properties.service.updatedAt,
                backend_version="2",
            )
            for device in supported_devices
        ]


[docs] class AWSBraketProvider(BraketProvider): """AWSBraketProvider class for accessing Amazon Braket backends.""" def __init_subclass__(cls, **kwargs): """This throws a deprecation warning on subclassing.""" warnings.warn( f"{cls.__name__} is deprecated.", DeprecationWarning, stacklevel=2 ) super().__init_subclass__(**kwargs)
[docs] def __init__(self): """This throws a deprecation warning on initialization.""" warnings.warn( f"{self.__class__.__name__} is deprecated. Use BraketProvider instead", DeprecationWarning, stacklevel=2, ) super().__init__()