use crate::{
AutodiffBackend,
tensor::{BasicOps, TensorKind},
};
#[cfg_attr(doc, doc = crate::doc_tensor!())]
#[cfg_attr(not(doc), doc = "`Tensor`")]
pub trait BasicAutodiffOps<B: AutodiffBackend>: BasicOps<B> + BasicOps<B::InnerBackend> {
type InnerKind: BasicOps<B::InnerBackend>;
#[cfg_attr(doc, doc = crate::doc_tensor!("inner"))]
#[cfg_attr(not(doc), doc = "`Tensor::inner`")]
fn inner(
tensor: <Self as TensorKind<B>>::Primitive,
) -> <Self::InnerKind as TensorKind<B::InnerBackend>>::Primitive;
#[cfg_attr(doc, doc = crate::doc_tensor!("from_inner"))]
#[cfg_attr(not(doc), doc = "`Tensor::from_inner`")]
fn from_inner(
inner: <Self::InnerKind as TensorKind<B::InnerBackend>>::Primitive,
) -> <Self as TensorKind<B>>::Primitive;
}