#[non_exhaustive]pub enum OpError {
Show 15 variants
InvalidViewShape,
NonContiguousView,
InvalidSliceShape(usize, usize),
SliceOutOfBounds,
IndexOutOfBounds,
AxesOutOfBounds,
CannotMatMul(usize, usize),
CannotBroadcast,
NotEnoughAxes(usize, usize),
NotSameShape(Box<[usize]>, Box<[usize]>),
NotSameBatch(usize, usize),
ZeroRankShape,
NotSameSlot(usize),
IncorrectSlotAmount(usize, usize),
NotSameLayoutAtSlot(usize),
}Expand description
The error returned by fallible tensor operations.
Operations that can fail at runtime — view, slice, matmul, the axis
reductions, and so on — return Result<_, OpError>. The error is produced
when the operation is built, not at .materialize(), so a bad shape is
caught at the call site rather than deep inside execution. OpError
implements Error and Display,
so it composes with ? and Box<dyn Error>.
§Examples
use candela::{OpError, Tensor};
let t = Tensor::from_slice(&[1.0, 2.0, 3.0, 4.0], &[2, 2]);
// A view must preserve the element count; 3 * 3 = 9 != 4.
assert!(matches!(t.view(&[3, 3]), Err(OpError::InvalidViewShape)));Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
InvalidViewShape
A view was requested with a shape whose element count differs from the original.
NonContiguousView
A view was requested on a non-contiguous tensor; use reshape instead.
InvalidSliceShape(usize, usize)
A slice resolved to more elements than the tensor holds. Carries (tensor_len, slice_len).
SliceOutOfBounds
A slice range is empty — its end is not past its start.
IndexOutOfBounds
An index passed to get is past the end of its axis.
AxesOutOfBounds
An axis index is out of range, repeated, or there are more axes than the tensor has.
CannotMatMul(usize, usize)
The inner dimensions of a matmul don’t agree. Carries the two mismatched sizes.
CannotBroadcast
The shapes (or a broadcast target) aren’t broadcast-compatible.
NotEnoughAxes(usize, usize)
An operation received the wrong number of axes or indices. Carries (expected, got).
NotSameShape(Box<[usize]>, Box<[usize]>)
Two tensors in an elementwise op have incompatible shapes. Carries both shapes.
NotSameBatch(usize, usize)
Batched matmul operands have incompatible batch dimensions. Carries the two batch sizes.
ZeroRankShape
A 0-D shape (&[]) was given; tensors must have rank >= 1.
NotSameSlot(usize)
IncorrectSlotAmount(usize, usize)
NotSameLayoutAtSlot(usize)
Trait Implementations§
Source§impl Error for OpError
impl Error for OpError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()