in crates/ratchet-core/src/ops/binary.rs [157:173]
fn compute_view(&self) -> Result<StorageView, OperationError> {
let lhs = &self.lhs;
let rhs = &self.rhs;
let shapes = &[lhs.shape(), rhs.shape()];
if lhs.is_scalar() || rhs.is_scalar() {
let other = if lhs.is_scalar() { rhs } else { lhs };
return Ok(other.storage_view().clone());
}
let broadcasted = Shape::multi_broadcast(shapes);
if broadcasted.is_none() {
let failed = shapes.iter().map(|s| (*s).clone()).collect::<Vec<_>>();
return Err(InvariantError::BroadcastingFailed(failed).into());
}
let broadcasted = broadcasted.unwrap();
let ostrides = Strides::from(&broadcasted);
Ok(StorageView::new(broadcasted, lhs.dt(), ostrides))
}