From 773196fb2fd2fbe3d6ca6856290a4e1161aeb7b2 Mon Sep 17 00:00:00 2001 From: MatteoRobbiati Date: Mon, 27 Jan 2025 12:26:30 +0100 Subject: [PATCH] refactor: constructing an abstract QiboTN backend and adapt quimb and cutensornet --- src/qibotn/backends/cutensornet.py | 17 +++-------------- src/qibotn/backends/quimb.py | 16 +++------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/src/qibotn/backends/cutensornet.py b/src/qibotn/backends/cutensornet.py index 1d38520..d4f1bcc 100644 --- a/src/qibotn/backends/cutensornet.py +++ b/src/qibotn/backends/cutensornet.py @@ -1,12 +1,13 @@ import numpy as np -from qibo.backends.numpy import NumpyBackend from qibo.config import raise_error from qibo.result import QuantumState +from qibotn.backends.abstract import QibotnBackend + CUDA_TYPES = {} -class CuTensorNet(NumpyBackend): # pragma: no cover +class CuTensorNet(QibotnBackend): # pragma: no cover # CI does not test for GPU """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): if hasattr(self, "cutn"): self.cutn.destroy(self.handle) - def set_precision(self, precision): - if precision != self.precision: - super().set_precision(precision) def cuda_type(self, dtype="complex64"): """Get CUDA Type. diff --git a/src/qibotn/backends/quimb.py b/src/qibotn/backends/quimb.py index df6488a..20223b3 100644 --- a/src/qibotn/backends/quimb.py +++ b/src/qibotn/backends/quimb.py @@ -2,8 +2,10 @@ from qibo.backends.numpy import NumpyBackend from qibo.config import raise_error from qibo.result import QuantumState +from qibotn.backends.abstract import QibotnBackend -class QuimbBackend(NumpyBackend): + +class QuimbBackend(QibotnBackend): def __init__(self, runcard): super().__init__() @@ -36,18 +38,6 @@ class QuimbBackend(NumpyBackend): self.platform = "QuimbBackend" 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( self, circuit, initial_state=None, nshots=None, return_array=False