1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::{ops::FloatTensor, Device};

use super::Backend;

/// Allows tensors to be transferred between backends efficiently.
pub trait BackendBridge<Origin: Backend>: Send + Sync + core::fmt::Debug {
    /// The target backend
    type Target: Backend;

    /// Transfer the tensor to the target backend.
    fn into_target<const D: usize>(
        tensor: FloatTensor<Origin, D>,
        device: Option<Device<Self::Target>>,
    ) -> FloatTensor<Self::Target, D>;

    /// Transfer the tensor from the target backend.
    fn from_target<const D: usize>(
        tensor: FloatTensor<Self::Target, D>,
        device: Option<Device<Origin>>,
    ) -> FloatTensor<Origin, D>;
}