use super::super::Tensor;
#[allow(unused_imports)]
pub use super::stability::{
is_stable_f32, is_stable_f64, stabilize_f32, stabilize_f64, MAX_SAFE_VALUE_F32,
MAX_SAFE_VALUE_F64, STABILITY_EPSILON_F32, STABILITY_EPSILON_F64,
};
impl Tensor {
pub fn shapes_are_broadcastable(shape1: &[usize], shape2: &[usize]) -> bool {
let max_len = shape1.len().max(shape2.len());
let mut s1 = vec![1; max_len];
let mut s2 = vec![1; max_len];
for (i, &dim) in shape1.iter().rev().enumerate() {
if i < max_len {
s1[max_len - 1 - i] = dim;
}
}
for (i, &dim) in shape2.iter().rev().enumerate() {
if i < max_len {
s2[max_len - 1 - i] = dim;
}
}
for (d1, d2) in s1.iter().zip(s2.iter()) {
if *d1 != *d2 && *d1 != 1 && *d2 != 1 {
return false; }
}
true }
}