Source code for c3.qiskit.c3_provider

from collections import OrderedDict
from qiskit.exceptions import QiskitError
from qiskit.providers.provider import ProviderV1
from qiskit.providers.exceptions import QiskitBackendNotFoundError

from .c3_backend import C3QasmPhysicsSimulator

SIMULATORS = [C3QasmPhysicsSimulator]


[docs]class C3Provider(ProviderV1): """Provider for C3 Qiskit backends Parameters ---------- ProviderV1 : ProviderV1 Derived from ProviderV1 from qiskit.providers.provider """ def __init__(self): super().__init__() self.name = "c3_provider" self._backends = self._verify_backends()
[docs] def backends(self, name=None, filters=None, **kwargs): """Return a list of backends matching the name Parameters ---------- name : str, optional name of the backend, by default None filters : callable, optional Filtering conditions, as callable, by default None Returns ------- list[BackendV1] A list of backend instances matching the condition """ backends = list(self._backends.values()) if name: try: backends = [self._backends[name]] except LookupError: raise QiskitBackendNotFoundError( "The '{}' backend is not installed in your system.".format(name) ) return backends
def _verify_backends(self): """Return instantiated Backends Returns ------- dict[str:BackendV1] A dict of the instantiated backends keyed by backend name """ ret = OrderedDict() for backend_cls in SIMULATORS: backend_instance = self._get_backend_instance(backend_cls) backend_name = backend_instance.name() ret[backend_name] = backend_instance return ret def _get_backend_instance(self, backend_cls): """Return an instance of a backend from its class Parameters ---------- backend_cls : class backend class Returns ------- BackendV1 an instance of the backend Raises ------ QiskitError if the backend can not be instantiated """ # Verify that the backend can be instantiated. try: backend_instance = backend_cls(provider=self) except Exception as err: raise QiskitError( "Backend %s could not be instantiated: %s" % (backend_cls, err) ) return backend_instance
[docs] def __str__(self): return "C3"