@@ -280,39 +280,23 @@ print.Future <- function(x, ...) {
280280 cat(" Label: " , label , " \n " , sep = " " )
281281 cat(" Expression:\n " )
282282 print(future [[" expr" ]])
283- cat(sprintf(" Lazy evaluation: %s\n " , future [[" lazy" ]]))
284- cat(sprintf(" Asynchronous evaluation: %s\n " , future [[" asynchronous" ]]))
285- cat(sprintf(" Local evaluation: %s\n " , future [[" local" ]]))
286- cat(sprintf(" Environment: %s\n " , envname(future [[" envir" ]])))
287- cat(sprintf(" Capture standard output: %s\n " , future [[" stdout" ]]))
288- conditions <- future [[" conditions" ]]
289- if (length(conditions ) > 0 ) {
290- exclude <- attr(conditions , " exclude" , exact = TRUE )
291- if (length(exclude ) == 0 ) exclude <- " <none>"
292- immediateConditionClasses <- attr(conditions , " immediateConditionClasses" , exact = TRUE )
293- if (length(immediateConditionClasses ) == 0 ) immediateConditionClasses <- " <none>"
294- cat(sprintf(" Capture condition classes: %s (excluding %s)\n " ,
295- commaq(conditions ),
296- commaq(exclude )))
297- cat(sprintf(" Immediate condition classes: %s\n " ,
298- commaq(immediateConditionClasses )))
299- } else {
300- cat(" Capture condition classes: <none>\n " )
301- }
302283
303284 # # FIXME: Add method globals_of() for Future such that it's possible
304285 # # also for SequentialFuture to return something here. /HB 2017-05-17
305- g <- future [[" globals" ]]
306- ng <- length(g )
307- if (ng > 0 ) {
308- gSizes <- sapply(g , FUN = objectSize )
309- gTotalSize <- sum(gSizes )
310- g <- head(g , n = 5L )
311- gSizes <- head(gSizes , n = 5L )
312- g <- sprintf(" %s %s of %s" , sapply(g , FUN = function (future ) class(future )[1 ]), sQuote(names(g )), sapply(gSizes , FUN = asIEC ))
313- if (ng > length(g )) g <- c(g , " ..." )
286+ gs <- future [[" globals" ]]
287+ ngs <- length(gs )
288+ if (ngs > 0 ) {
289+ gTotalSize <- objectSize(gs )
290+ gSizes <- sapply(gs , FUN = objectSize )
291+ o <- order(gSizes , decreasing = TRUE )
292+ o <- head(o , n = 5L )
293+ gSizes <- gSizes [o ]
294+ gs <- gs [o ]
295+ types <- vapply(gs , FUN.VALUE = NA_character_ , FUN = function (g ) class(g )[1 ])
296+ g <- sprintf(" %s %s of %s" , types , sQuote(names(gSizes )), sapply(gSizes , FUN = asIEC ))
297+ if (ngs > length(gSizes )) g <- c(g , " ..." )
314298 g <- hpaste(g , maxHead = 5L , maxTail = 0L )
315- cat(sprintf(" Globals: %d objects totaling %s (%s)\n " , ng , asIEC(gTotalSize ), g ))
299+ cat(sprintf(" Globals: %d objects totaling %s (%s)\n " , ngs , asIEC(gTotalSize ), g ))
316300 } else {
317301 cat(" Globals: <none>\n " )
318302 }
@@ -331,6 +315,28 @@ print.Future <- function(x, ...) {
331315 cat(" L'Ecuyer-CMRG RNG seed: <none> (seed = " , deparse(future [[" seed" ]]), " )\n " , sep = " " )
332316 }
333317
318+ cat(sprintf(" Capture standard output: %s\n " , future [[" stdout" ]]))
319+ conditions <- future [[" conditions" ]]
320+ if (length(conditions ) > 0 ) {
321+ exclude <- attr(conditions , " exclude" , exact = TRUE )
322+ if (length(exclude ) == 0 ) exclude <- " <none>"
323+ immediateConditionClasses <- attr(conditions , " immediateConditionClasses" , exact = TRUE )
324+ if (length(immediateConditionClasses ) == 0 ) immediateConditionClasses <- " <none>"
325+ cat(sprintf(" Capture condition classes: %s (excluding %s)\n " ,
326+ commaq(conditions ),
327+ commaq(exclude )))
328+ cat(sprintf(" Immediate condition classes: %s\n " ,
329+ commaq(immediateConditionClasses )))
330+ } else {
331+ cat(" Capture condition classes: <none>\n " )
332+ }
333+
334+ cat(sprintf(" Lazy evaluation: %s\n " , future [[" lazy" ]]))
335+ cat(sprintf(" Local evaluation: %s\n " , future [[" local" ]]))
336+ cat(sprintf(" Asynchronous evaluation: %s\n " , future [[" asynchronous" ]]))
337+ cat(sprintf(" Early signaling: %s\n " , isTRUE(future [[" earlySignal" ]])))
338+ cat(sprintf(" Environment: %s\n " , envname(future [[" envir" ]])))
339+
334340 state <- future [[" state" ]]
335341 cat(sprintf(" State: %s\n " , commaq(state )))
336342
@@ -355,25 +361,30 @@ print.Future <- function(x, ...) {
355361 cat(sprintf(" Resolved: %s\n " , tryCatch(resolved(future , .signalEarly = FALSE ), error = function (ex ) NA )))
356362 }
357363
364+ cat(sprintf(" Unique identifier: %s\n " , paste(future [[" uuid" ]], collapse = " -" )))
365+ cat(sprintf(" Owner process: %s\n " , future [[" owner" ]]))
366+ cat(sprintf(" Class: %s\n " , commaq(class )))
367+
358368 if (hasResult ) {
359- if (inherits(result , " FutureResult" )) {
360- value <- result [[" value" ]]
361- } else {
369+ if (! inherits(result , " FutureResult" )) {
362370 stop(FutureError(sprintf(" The %s object does not have a 'results' field" , class(future )[1 ]), future = future ))
363371 }
372+
373+ value <- result [[" value" ]]
364374 cat(sprintf(" Value: %s of class %s\n " , asIEC(objectSize(value )), sQuote(class(value )[1 ])))
365- if (inherits(result , " FutureResult" )) {
366- conditions <- result [[" conditions" ]]
367- conditionClasses <- vapply(conditions , FUN = function (c ) class(c [[" condition" ]])[1 ], FUN.VALUE = NA_character_ )
368- cat(sprintf(" Conditions captured: [n=%d] %s\n " , length(conditionClasses ), hpaste(sQuote(conditionClasses ))))
369- }
375+
376+ conditions <- result [[" conditions" ]]
377+ conditionClasses <- vapply(conditions , FUN = function (c ) class(c [[" condition" ]])[1 ], FUN.VALUE = NA_character_ )
378+ cat(sprintf(" Conditions captured: [n=%d] %s\n " , length(conditionClasses ), hpaste(sQuote(conditionClasses ))))
379+
380+ t0 <- result [[" started" ]]
381+ t1 <- result [[" finished" ]]
382+ cat(sprintf(" Duration: %s (started %s)\n " , format(t1 - t0 ), t0 ))
383+ cat(sprintf(" Worker process: %s\n " , result [[" session_uuid" ]]))
370384 } else {
371385 cat(" Value: <not collected>\n " )
372386 cat(" Conditions captured: <none>\n " )
373387 }
374- cat(sprintf(" Early signaling: %s\n " , isTRUE(future [[" earlySignal" ]])))
375- cat(sprintf(" Owner process: %s\n " , future [[" owner" ]]))
376- cat(sprintf(" Class: %s\n " , commaq(class )))
377388} # # print()
378389
379390
0 commit comments