in crates/ratchet-core/src/gpu/buffer_allocator/allocator.rs [141:162]
fn determine_tensor_source(source: &Tensor) -> &Tensor {
let mut true_source = source;
loop {
if true_source.op().srcs().is_empty() || !true_source.op().supports_inplace() {
//If no sources, we are at the root
//Or if the operation doesn't support inplace
break;
}
//TODO: operations should define their "inplace" source
//doesn't necessarily have to be the zeroth
let to_modify = true_source.op().srcs()[0];
if Arc::strong_count(&to_modify.inner) > 1 {
//If the source has multiple consumers, we can't inplace
//so we break here
break;
}
true_source = to_modify;
}
log::trace!("Traversed to true source: {:?}", true_source.id());
true_source
}