Joins even-indexed and odd-indexed values If the number of elements is not divisible by two, the first element is returned in `ShrinkResult.remainder`.
(&self)
| 147 | /// If the number of elements is not divisible by two, |
| 148 | /// the first element is returned in `ShrinkResult.remainder`. |
| 149 | fn shrink(&self) -> Result<ShrinkResult> { |
| 150 | let bit_len = self.a_equal_b.get_type()?.get_shape()[0] as i64; |
| 151 | let offset = bit_len % 2; |
| 152 | let remainder = if offset == 0 { |
| 153 | None |
| 154 | } else { |
| 155 | Some(Self { |
| 156 | a_equal_b: self.a_equal_b.get(vec![0])?, |
| 157 | a: self.a.get(vec![0])?, |
| 158 | }) |
| 159 | }; |
| 160 | let shrinked = if bit_len <= 1 { |
| 161 | None |
| 162 | } else { |
| 163 | let slice0 = self.sub_slice(offset, bit_len)?; |
| 164 | let slice1 = self.sub_slice(offset + 1, bit_len)?; |
| 165 | Some(slice0.join(&slice1)?) |
| 166 | }; |
| 167 | |
| 168 | Ok(ShrinkResult { |
| 169 | shrinked, |
| 170 | remainder, |
| 171 | }) |
| 172 | } |
| 173 | |
| 174 | /// Returns every second element starting from `start_offset` |
| 175 | fn sub_slice(&self, start_offset: i64, bit_len: i64) -> Result<Self> { |