From 27b1dc938bbaf3514ab63e205be13fa09119cf85 Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Sun, 8 Mar 2020 21:19:37 -0400 Subject: [PATCH 1/2] automatic cross platform progress monitoring --- Project.toml | 3 +++ src/DiffEqBase.jl | 2 +- src/solve.jl | 8 ++++++-- src/utils.jl | 3 +++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index 31aba08bb..e3fd3bb05 100644 --- a/Project.toml +++ b/Project.toml @@ -12,7 +12,9 @@ DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" FunctionWrappers = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" IteratorInterfaceExtensions = "82899510-4779-5014-852e-03e436cf321d" +Juno = "e5e0dc1b-0480-54bc-9374-aad01c23163d" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Logging = "56ddb016-857b-54e1-b83d-db4d58db5568" MuladdMacro = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" @@ -26,6 +28,7 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" SuiteSparse = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" TableTraits = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +TerminalLoggers = "5d786b92-1e48-4d6f-9151-6b4477ca9bed" TreeViews = "a2a6695c-b41b-5b7d-aed9-dbfdeacea5d7" ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444" diff --git a/src/DiffEqBase.jl b/src/DiffEqBase.jl index 958fc7856..cdc7aaa1a 100644 --- a/src/DiffEqBase.jl +++ b/src/DiffEqBase.jl @@ -3,7 +3,7 @@ module DiffEqBase using RecipesBase, RecursiveArrayTools, Requires, TableTraits, IteratorInterfaceExtensions, TreeViews, IterativeSolvers, RecursiveFactorization, Distributed, ArrayInterface, - DataStructures + DataStructures, Logging, TerminalLoggers, Juno import ZygoteRules, ChainRulesCore diff --git a/src/solve.jl b/src/solve.jl index 6297a31a1..99deba120 100644 --- a/src/solve.jl +++ b/src/solve.jl @@ -41,9 +41,13 @@ function solve_call(_prob,args...;merge_callbacks = true,kwargs...) callbacks = NamedTuple{(:callback,)}( [DiffEqBase.CallbackSet(_prob.kwargs.callback, values(kwargs).callback )] ) kwargs = merge(kwargs_temp, callbacks) end - __solve(_prob,args...;_prob.kwargs...,kwargs...) + maybe_with_logger(default_logger()) do + __solve(_prob,args...;_prob.kwargs...,kwargs...) + end else - __solve(_prob,args...;kwargs...) + maybe_with_logger(default_logger()) do + __solve(_prob,args...;kwargs...) + end end end diff --git a/src/utils.jl b/src/utils.jl index f6e2d7d90..d0319768e 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -255,3 +255,6 @@ prob2dtmin(tspan, onet, ::Any) = onet*1//10^(10) timedepentdtmin(integrator::DEIntegrator) = timedepentdtmin(integrator.t, integrator.opts.dtmin) timedepentdtmin(t::AbstractFloat, dtmin) = abs(max(eps(t), dtmin)) timedepentdtmin(::Any, dtmin) = abs(dtmin) + +maybe_with_logger(f, logger) = logger === nothing ? f() : with_logger(f, logger) +default_logger() = Juno.isactive() ? nothing : TerminalLogger() From d58d4533f8e4e7c8fb2f3450347c5178230233a8 Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Sun, 8 Mar 2020 22:21:17 -0400 Subject: [PATCH 2/2] add a logger kwarg --- src/solve.jl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/solve.jl b/src/solve.jl index 99deba120..37b6a38c8 100644 --- a/src/solve.jl +++ b/src/solve.jl @@ -33,7 +33,9 @@ function init(prob::DEProblem,args...;kwargs...) end end -function solve_call(_prob,args...;merge_callbacks = true,kwargs...) +function solve_call(_prob,args...;merge_callbacks = true, + logger = default_logger(), + kwargs...) if :kwargs ∈ propertynames(_prob) if merge_callbacks && haskey(_prob.kwargs,:callback) && haskey(kwargs, :callback) kwargs_temp = NamedTuple{Base.diff_names(Base._nt_names( @@ -41,11 +43,11 @@ function solve_call(_prob,args...;merge_callbacks = true,kwargs...) callbacks = NamedTuple{(:callback,)}( [DiffEqBase.CallbackSet(_prob.kwargs.callback, values(kwargs).callback )] ) kwargs = merge(kwargs_temp, callbacks) end - maybe_with_logger(default_logger()) do + maybe_with_logger(logger) do __solve(_prob,args...;_prob.kwargs...,kwargs...) end else - maybe_with_logger(default_logger()) do + maybe_with_logger(default_logger(logger)) do __solve(_prob,args...;kwargs...) end end