pub trait Tensor: HasNdArray + CanUpdateWithGradients + HasUniqueId + IntoPhantom {
type TapeHolder: TapeHolder;
type NoTape: 'static + Tensor<TapeHolder = NoTape, ArrayType = Self::ArrayType> + TensorCreator + CanPutTapeHolder<Self::TapeHolder, Output = Self>;
type WithTape: 'static + Tensor<TapeHolder = WithTape, ArrayType = Self::ArrayType>;
fn split_tape_holder(self) -> (Self::NoTape, Self::TapeHolder);
}