Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,6 @@ MNIST-data
^cran-comments\.md$
^CRAN-SUBMISSION$
^revdep$
^\.positai$
^\.claude$
^\.codex$
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ MNIST-data
issues/
logs
revdep
.positai
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# tensorflow (development version)

- Updated docs to recommend `py_require_tensorflow()` for TensorFlow setup (#627).
- Fixed `tensorboard()` startup with recent TensorBoard versions (#626).

# tensorflow 2.20.0

- Updates for reticulate 1.41 and `reticuate::py_require()`.
Expand Down
29 changes: 15 additions & 14 deletions R/tensorboard.R
Original file line number Diff line number Diff line change
Expand Up @@ -142,13 +142,24 @@ tensorboard <- function(log_dir, action = c("start", "stop"),

tensorboard_version <- function() {
if (is.null(ver <- .globals$tensorboard_version)) {
ver <- package_version(system("tensorboard --version_tb", intern = TRUE, ignore.stderr = TRUE))
ver <- package_version(system("tensorboard --version", intern = TRUE, ignore.stderr = TRUE))
.globals$tensorboard_version <- ver
}
ver
}


tensorboard_python_warnings <- function() {
filter <- "ignore:pkg_resources is deprecated as an API:UserWarning:tensorboard.default"
warnings <- Sys.getenv("PYTHONWARNINGS", unset = "")

if (nzchar(warnings))
paste(warnings, filter, sep = ",")
else
filter
}


launch_tensorboard <- function(log_dir, host, port, explicit_port, reload_interval, purge_orphaned_data) {

if (tensorboard_version() < "2.0") {
Expand All @@ -172,7 +183,8 @@ launch_tensorboard <- function(log_dir, host, port, explicit_port, reload_interv
"--port", as.character(port),
"--reload_interval", as.integer(reload_interval),
"--purge_orphaned_data", purge_orphaned_data),
stdout = "|", stderr = "|")
stdout = "|", stderr = "|",
env = c("current", PYTHONWARNINGS = tensorboard_python_warnings()))

# poll for availability of the http server (continue as long as the
# process is still alive). note that we used to poll for stdout however
Expand Down Expand Up @@ -202,21 +214,10 @@ launch_tensorboard <- function(log_dir, host, port, explicit_port, reload_interv
err <- p$read_error_lines()

# write it unless it's a port in use error when we are auto-binding
if (explicit_port || !any(grepl(paste0("^.*", port, ".*already in use.*$"), err)))
if (length(err) && (explicit_port || !any(grepl(paste0("^.*", port, ".*already in use.*$"), err))))
write(err, stderr())
}

# return the process
p
}











Loading