Files
final-qibotn/src/qibotn/backends/__init__.py
2025-01-27 12:28:54 +01:00

52 lines
1.8 KiB
Python

from typing import Union
from qibo.config import raise_error
from qibotn.backends.cutensornet import CuTensorNet # pylint: disable=E0401
from qibotn.backends.quimb import QuimbBackend # pylint: disable=E0401
from qibotn.backends.qmatchatea import QMatchaTeaBackend # pylint: disable=E0401
from qibotn.backends.abstract import QibotnBackend
QibotnBackend = Union[CuTensorNet, QuimbBackend, QMatchaTeaBackend]
PLATFORMS = ("cutensornet", "qutensornet", "qmatchatea")
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)
elif platform == "qmatchatea": # pragma: no cover
return QMatchaTeaBackend()
else:
raise_error(
NotImplementedError,
f"Unsupported platform {platform}, please pick one in (`cutensornet`, `qutensornet`, `qmatchatea`)",
)
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