refactor: constructing an abstract QiboTN backend and adapt quimb and cutensornet

This commit is contained in:
MatteoRobbiati
2025-01-27 12:26:30 +01:00
parent b28260289e
commit 773196fb2f
2 changed files with 6 additions and 27 deletions

View File

@@ -1,12 +1,13 @@
import numpy as np import numpy as np
from qibo.backends.numpy import NumpyBackend
from qibo.config import raise_error from qibo.config import raise_error
from qibo.result import QuantumState from qibo.result import QuantumState
from qibotn.backends.abstract import QibotnBackend
CUDA_TYPES = {} CUDA_TYPES = {}
class CuTensorNet(NumpyBackend): # pragma: no cover class CuTensorNet(QibotnBackend): # pragma: no cover
# CI does not test for GPU # CI does not test for GPU
"""Creates CuQuantum backend for QiboTN.""" """Creates CuQuantum backend for QiboTN."""
@@ -77,22 +78,10 @@ class CuTensorNet(NumpyBackend): # pragma: no cover
), ),
} }
def apply_gate(self, gate, state, nqubits): # pragma: no cover
raise_error(NotImplementedError, "QiboTN cannot apply gates directly.")
def apply_gate_density_matrix(self, gate, state, nqubits): # pragma: no cover
raise_error(NotImplementedError, "QiboTN cannot apply gates directly.")
def assign_measurements(self, measurement_map, circuit_result):
raise_error(NotImplementedError, "Not implemented in QiboTN.")
def __del__(self): def __del__(self):
if hasattr(self, "cutn"): if hasattr(self, "cutn"):
self.cutn.destroy(self.handle) self.cutn.destroy(self.handle)
def set_precision(self, precision):
if precision != self.precision:
super().set_precision(precision)
def cuda_type(self, dtype="complex64"): def cuda_type(self, dtype="complex64"):
"""Get CUDA Type. """Get CUDA Type.

View File

@@ -2,8 +2,10 @@ from qibo.backends.numpy import NumpyBackend
from qibo.config import raise_error from qibo.config import raise_error
from qibo.result import QuantumState from qibo.result import QuantumState
from qibotn.backends.abstract import QibotnBackend
class QuimbBackend(NumpyBackend):
class QuimbBackend(QibotnBackend):
def __init__(self, runcard): def __init__(self, runcard):
super().__init__() super().__init__()
@@ -36,18 +38,6 @@ class QuimbBackend(NumpyBackend):
self.platform = "QuimbBackend" self.platform = "QuimbBackend"
self.versions["quimb"] = self.quimb.__version__ self.versions["quimb"] = self.quimb.__version__
def apply_gate(self, gate, state, nqubits): # pragma: no cover
raise_error(NotImplementedError, "QiboTN cannot apply gates directly.")
def apply_gate_density_matrix(self, gate, state, nqubits): # pragma: no cover
raise_error(NotImplementedError, "QiboTN cannot apply gates directly.")
def assign_measurements(self, measurement_map, circuit_result):
raise_error(NotImplementedError, "Not implemented in QiboTN.")
def set_precision(self, precision):
if precision != self.precision:
super().set_precision(precision)
def execute_circuit( def execute_circuit(
self, circuit, initial_state=None, nshots=None, return_array=False self, circuit, initial_state=None, nshots=None, return_array=False