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>;
}