fn determine_tensor_source()

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
    }