Skip to main content

09_slice_str/
09_slice_str.rs

1//! Convenience string slicing — NumPy-like, always returns Result.
2//!
3//! Run: cargo run --example 09_slice_str
4//!
5//! `slice_str` is a secondary convenience API. The builder (example 08) is
6//! canonical. Malformed specs always return Err, never panic.
7
8use matten::Tensor;
9
10fn main() -> Result<(), Box<dyn std::error::Error>> {
11    let t = Tensor::new((1..=12).map(|x| x as f64).collect(), &[3, 4]);
12
13    println!("\"0, :\"    = {:?}", t.slice_str("0, :")?);
14    println!("\"0:2, :\" = {:?}", t.slice_str("0:2, :")?);
15    println!("\":, 1:3\" = {:?}", t.slice_str(":, 1:3")?);
16
17    // Whitespace is ignored
18    let a = t.slice_str("0:2, :")?;
19    let b = t.slice_str(" 0:2 , : ")?;
20    assert_eq!(a, b);
21    println!("whitespace-insensitive: OK");
22
23    // builder and slice_str agree
24    let from_str = t.slice_str("0:2, :")?;
25    let from_builder = t.slice().range(0..2).all().build()?;
26    assert_eq!(from_str, from_builder);
27    println!("builder == slice_str: OK");
28
29    // Malformed specs never panic
30    println!("bad spec: {:?}", t.slice_str("0::")); // Err
31
32    Ok(())
33}