redstone_ml/ndarray/
print.rs

1use crate::dtype::RawDataType;
2use crate::{NdArray, StridedMemory};
3use std::fmt;
4
5
6// TODO this is a temporary implementation
7impl<T: RawDataType> fmt::Debug for NdArray<'_, T> {
8    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9        fn fmt_inner<T: fmt::Debug>(f: &mut fmt::Formatter<'_>,
10                                    shape: &[usize],
11                                    iter: &mut dyn Iterator<Item=T>,
12                                    level: usize) -> fmt::Result {
13            if shape.is_empty() {
14                return Ok(write!(f, "{:?}", iter.next().unwrap())?);
15            }
16
17            if shape.len() == 1 {
18                write!(f, "[")?;
19                for i in 0..shape[0] {
20                    if i > 0 { write!(f, ", ")?; }
21                    write!(f, "{:?}", iter.next().unwrap())?
22                }
23                write!(f, "]")
24            } else {
25                write!(f, "[")?;
26                for i in 0..shape[0] {
27                    if i > 0 {
28                        write!(f, ",{:indent$}", "", indent = (level + 1) * 2)?;
29                    } else {
30                        write!(f, "{:indent$}", "", indent = (level + 1) * 2)?;
31                    }
32                    fmt_inner(f, &shape[1..], iter, level + 1)?;
33                }
34                write!(f, "{:indent$}]", "", indent = level * 2)
35            }
36        }
37
38        fmt_inner(f, self.shape(), &mut self.flatiter(), 0)
39    }
40}