SliceInfoElem::Index(a) is the index a. It can also be created with
SliceInfoElem::from(a). The Python equivalent is [a]. The macro
equivalent is s![a].
SliceInfoElem::Slice { start: 0, end: None, step: 1 } is the full range
of an axis. It can also be created with SliceInfoElem::from(..). The
Python equivalent is [:]. The macro equivalent is s![..].
SliceInfoElem::Slice { start: a, end: Some(b), step: 2 } is every second
element from a until b. It can also be created with
SliceInfoElem::from(Slice::from(a..b).step_by(2)). The Python equivalent
is [a:b:2]. The macro equivalent is s![a..b;2].
SliceInfoElem::Slice { start: a, end: None, step: -1 } is every element,
from a until the end, in reverse order. It can also be created with
SliceInfoElem::from(Slice::from(a..).step_by(-1)). The Python equivalent
is [a::-1]. The macro equivalent is s![a..;-1].
SliceInfoElem::NewAxis is a new axis of length 1. It can also be created
with SliceInfoElem::from(NewAxis). The Python equivalent is
[np.newaxis]. The macro equivalent is s![NewAxis].
A range with step size. end is an exclusive index. Negative start
or end indexes are counted from the back of the axis. If end is
None, the slice extends to the end of the axis.