MCPcopy Create free account
hub / github.com/ciphermodelabs/ciphercore / get_clean_slice

Function get_clean_slice

ciphercore-base/src/slices.rs:77–106  ·  view source on GitHub ↗
(shape: ArrayShape, slice: Slice)

Source from the content-addressed store, hash-verified

75
76#[doc(hidden)]
77pub fn get_clean_slice(shape: ArrayShape, slice: Slice) -> Result<Slice> {
78 let mut num_ellipsis = 0;
79 for x in &slice {
80 if *x == SliceElement::Ellipsis {
81 num_ellipsis += 1;
82 }
83 }
84 if num_ellipsis > 1 {
85 return Err(runtime_error!("Multiple Ellipsis in the slice"));
86 }
87 let mut clean_slice = vec![];
88 for x in &slice {
89 if *x == SliceElement::Ellipsis {
90 let padding = shape.len() as i64 - slice.len() as i64 + 1;
91 if padding < 0 {
92 return Err(runtime_error!(
93 "Ellipsis corresponds to a negative number of entries"
94 ));
95 }
96 clean_slice
97 .extend(repeat(SliceElement::SubArray(None, None, None)).take(padding as usize));
98 } else {
99 clean_slice.push(x.clone());
100 }
101 }
102 if clean_slice.len() > shape.len() {
103 return Err(runtime_error!("Slice is too long"));
104 }
105 Ok(clean_slice)
106}
107
108fn normalize_subarray(dimension: u64, slice_element: SliceElement) -> Result<(i64, i64, i64)> {
109 if let SliceElement::SubArray(begin, end, step) = slice_element {

Callers 2

get_slice_shapeFunction · 0.85
slice_indexFunction · 0.85

Calls 3

cloneMethod · 0.80
extendMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected