use ndarray::{s, Array2, Array3, ArrayView1};
use std::collections::HashMap;
use anyhow::{anyhow, Result};
pub fn get_current(current: Option<&Array3<f32>>, i: usize, j: usize) -> ArrayView1<'_, f32> {
if let Some(array3) = current {
if i < array3.shape()[0] && j < array3.shape()[1] {
return array3.slice(s![i, j, ..]);
}
}
ArrayView1::from(&[])
}
pub fn check_dims(
a: &HashMap<i32, Array2<f32>>,
b: &HashMap<i32, Array2<f32>>,
) -> Result<()> {
if a.len() != b.len() {
return Err(anyhow!(
"HashMaps have different number of keys: {} vs {}",
a.len(),
b.len()
));
}
for (k, arr_a) in a {
let arr_b = b.get(k).ok_or_else(|| {
anyhow!("Key {} exists in first map but not in second", k)
})?;
if arr_a.dim() != arr_b.dim() {
return Err(anyhow!(
"Dimension mismatch for key {}: {:?} vs {:?}",
k,
arr_a.dim(),
arr_b.dim()
));
}
}
Ok(())
}