Skip to main content

embedded_nn/
reshape.rs

1//! Tensor reshape operations.
2
3use crate::types::{Dims, Error, Result};
4
5/// Reshapes an int8 tensor into target dimensions without moving data (copying contiguous buffer).
6pub fn reshape_s8(
7    input_dims: &Dims,
8    input: &[i8],
9    output_dims: &Dims,
10    output: &mut [i8],
11) -> Result<()> {
12    if input_dims.total_size() != output_dims.total_size() {
13        return Err(Error::ArgumentError);
14    }
15
16    let len = input_dims.total_size();
17    output[..len].copy_from_slice(&input[..len]);
18    Ok(())
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_reshape_s8() {
27        let in_dims = Dims::new(1, 2, 2, 1);
28        let input = [10i8, 20i8, 30i8, 40i8];
29
30        let out_dims = Dims::new(1, 1, 4, 1);
31        let mut output = [0i8; 4];
32
33        reshape_s8(&in_dims, &input, &out_dims, &mut output).unwrap();
34        assert_eq!(output, input);
35    }
36}