pub trait Shape: Debug + Send + Sync + Clone + Eq + PartialEq<Self> + IndexMut<usize, Output = usize> + AsRef<[usize]> + AsMut<[usize]> + 'static {
type Smaller: Shape;
type Larger: Shape + RemoveAxis;
const NDIM: Option<usize>;
// Required methods
fn ndim(&self) -> usize;
fn size(&self) -> usize;
fn zeros(ndim: usize) -> Self;
// Provided methods
fn slice(&self) -> &[usize] { ... }
fn slice_mut(&mut self) -> &mut [usize] { ... }
fn as_dyn(&self) -> Dyn { ... }
fn broadcast<In, Out>(&self, other: &In) -> Result<Out, Error>
where In: Shape,
Out: Shape { ... }
fn indices(&self) -> ShapeIndexIter<Self> ⓘ { ... }
fn axis(&self, axis: Axis) -> usize { ... }
}