feat: implemented metabackend
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
import importlib.metadata as im
|
import importlib.metadata as im
|
||||||
|
|
||||||
|
from qibotn.backends import MetaBackend
|
||||||
|
|
||||||
__version__ = im.version(__package__)
|
__version__ = im.version(__package__)
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from qibotn.backends.cutensornet import CuTensorNet # pylint: disable=E0401
|
||||||
|
from qibotn.backends.quimb import QuimbBackend # pylint: disable=E0401
|
||||||
|
|
||||||
|
QibotnBackend = Union[CuTensorNet, QuimbBackend]
|
||||||
|
|
||||||
|
PLATFORMS = ("cutensornet", "qutensornet")
|
||||||
|
|
||||||
|
|
||||||
|
class MetaBackend:
|
||||||
|
"""Meta-backend class which takes care of loading the qibotn backends."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def load(platform: str, runcard: dict = None) -> QibotnBackend:
|
||||||
|
"""Loads the backend.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
platform (str): Name of the backend to load: either `cutensornet` or `qutensornet`.
|
||||||
|
runcard (dict): Dictionary containing the simulation settings.
|
||||||
|
Returns:
|
||||||
|
qibo.backends.abstract.Backend: The loaded backend.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if platform == "cutensornet": # pragma: no cover
|
||||||
|
return CuTensorNet(runcard)
|
||||||
|
elif platform == "qutensornet": # pragma: no cover
|
||||||
|
return QuimbBackend(runcard)
|
||||||
|
else:
|
||||||
|
raise_error(
|
||||||
|
NotImplementedError,
|
||||||
|
f"Unsupported platform {platform}, please pick one in (`cutensornet`, `qutensornet)",
|
||||||
|
)
|
||||||
|
|
||||||
|
def list_available(self) -> dict:
|
||||||
|
"""Lists all the available qibotn backends."""
|
||||||
|
available_backends = {}
|
||||||
|
for platform in PLATFORMS:
|
||||||
|
try:
|
||||||
|
MetaBackend.load(platform=platform)
|
||||||
|
available = True
|
||||||
|
except:
|
||||||
|
available = False
|
||||||
|
available_backends[platform] = available
|
||||||
|
return available_backends
|
||||||
|
|||||||
Reference in New Issue
Block a user