         // Return materialized outputs if any.
         if let outputs = outputs { return outputs }
 
-        materializeLiveTensors()
+        LazyTensorOperation.materialize(targets: [self])
 
         // Our outputs should have been updated by now. Otherwise,
         // something terrible happened!

        case .concrete(_): return nil
        }
    }
    
    // Liveness tracking for LazyTensorOperations
    //
    static func isLive(_ op: LazyTensorOperation) -> Bool {

        inputs = inputs.map { materializedAsNeeded(input: $0) }
    }

    static func materialize(targets: [LazyTensorOperation]) {
        let traceInfo = LazyTensorTraceBuilder.materializationTraceInfo(targets)
        debugLog("Extracted trace:\n\(traceInfo.trace)")

        let function = TFFunction(trace: traceInfo.trace)
