pub enum Op<D: Device> {
Show 23 variants
Binary(Tensor<D, Float>, Tensor<D, Float>, BinaryOp),
BinaryScalarRhs(Tensor<D, Float>, f64, BinaryOp),
BinaryScalarLhs(f64, Tensor<D, Float>, BinaryOp),
FloatUnary(Tensor<D, Float>, FloatUnaryOp),
Unary(Tensor<D, Float>, UnaryOp<f64>),
Reduce(Tensor<D, Float>, ReduceOp, Vec<usize>),
Matmul(Tensor<D, Float>, Tensor<D, Float>),
Broadcast(Tensor<D, Float>),
Narrow(Tensor<D, Float>, usize, usize, usize),
Slice(Tensor<D, Float>, usize, usize, usize, usize),
IndexSelect(Tensor<D, Float>, Tensor<D, Int>, usize),
IndexAdd(Tensor<D, Float>, Tensor<D, Int>, Tensor<D, Float>, usize),
ScatterAdd(Tensor<D, Float>, Tensor<D, Int>, Tensor<D, Float>, usize),
Gather(Tensor<D, Float>, Tensor<D, Int>, usize),
Reshape(Tensor<D, Float>),
Transpose(Tensor<D, Float>, usize, usize),
Permute(Tensor<D, Float>, Vec<usize>),
Cat(Vec<Tensor<D, Float>>, usize),
Pick(Tensor<D, Bool>, Option<Tensor<D, Float>>, Option<Tensor<D, Float>>),
Copy(Tensor<D, Float>),
RmsNorm(Tensor<D, Float>, Tensor<D, Float>, f64),
Softmax(Tensor<D, Float>, usize),
Cast(Tensor<D, Float>),
}Expand description
A node in the (implicit) computation graph: the operation that produced a
Float tensor, holding Arc references to its inputs. Only Float tensors
record ops — Int/Bool tensors are never differentiated.
Inputs are typed by kind: differentiable inputs are Tensor<D, Float>,
index inputs are Tensor<D, Int>, and masks are Tensor<D, Bool>.
Variants§
Binary(Tensor<D, Float>, Tensor<D, Float>, BinaryOp)
BinaryScalarRhs(Tensor<D, Float>, f64, BinaryOp)
BinaryScalarLhs(f64, Tensor<D, Float>, BinaryOp)
FloatUnary(Tensor<D, Float>, FloatUnaryOp)
Unary(Tensor<D, Float>, UnaryOp<f64>)
Reduce(Tensor<D, Float>, ReduceOp, Vec<usize>)
Matmul(Tensor<D, Float>, Tensor<D, Float>)
Broadcast(Tensor<D, Float>)
Narrow(Tensor<D, Float>, usize, usize, usize)
Slice(Tensor<D, Float>, usize, usize, usize, usize)
IndexSelect(Tensor<D, Float>, Tensor<D, Int>, usize)
IndexAdd(Tensor<D, Float>, Tensor<D, Int>, Tensor<D, Float>, usize)
ScatterAdd(Tensor<D, Float>, Tensor<D, Int>, Tensor<D, Float>, usize)
Gather(Tensor<D, Float>, Tensor<D, Int>, usize)
Reshape(Tensor<D, Float>)
Transpose(Tensor<D, Float>, usize, usize)
Permute(Tensor<D, Float>, Vec<usize>)
Cat(Vec<Tensor<D, Float>>, usize)
Pick(Tensor<D, Bool>, Option<Tensor<D, Float>>, Option<Tensor<D, Float>>)
Copy(Tensor<D, Float>)
RmsNorm(Tensor<D, Float>, Tensor<D, Float>, f64)
Softmax(Tensor<D, Float>, usize)
Cast(Tensor<D, Float>)
Precision cast within the float kind (e.g. f32 -> f64). Records the input so the gradient can be cast back — the key capability the old design lacked.
Auto Trait Implementations§
impl<D> Freeze for Op<D>
impl<D> RefUnwindSafe for Op<D>where
Tensor<D>: RefUnwindSafe,
Tensor<D, Int>: RefUnwindSafe,
Vec<Tensor<D>>: RefUnwindSafe,
Tensor<D, Bool>: RefUnwindSafe,
Option<Tensor<D>>: RefUnwindSafe,
impl<D> Send for Op<D>
impl<D> Sync for Op<D>
impl<D> Unpin for Op<D>
impl<D> UnsafeUnpin for Op<D>where
Tensor<D>: UnsafeUnpin,
Tensor<D, Int>: UnsafeUnpin,
Vec<Tensor<D>>: UnsafeUnpin,
Tensor<D, Bool>: UnsafeUnpin,
Option<Tensor<D>>: UnsafeUnpin,
impl<D> UnwindSafe for Op<D>where
Tensor<D>: UnwindSafe,
Tensor<D, Int>: UnwindSafe,
Vec<Tensor<D>>: UnwindSafe,
Tensor<D, Bool>: UnwindSafe,
Option<Tensor<D>>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more