From 24fa71b882ecfe0393251583bb93a93e78ff3c1b Mon Sep 17 00:00:00 2001 From: David Widmann Date: Mon, 9 Mar 2020 12:53:20 +0100 Subject: [PATCH 1/3] Do respect existing loggers --- Project.toml | 6 ++++-- src/DiffEqBase.jl | 4 +++- src/solve.jl | 17 +++++++---------- src/utils.jl | 20 ++++++++++++++++++-- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Project.toml b/Project.toml index bbb477875..742d68d49 100644 --- a/Project.toml +++ b/Project.toml @@ -6,15 +6,16 @@ version = "6.19.0" [deps] ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +ConsoleProgressMonitor = "88cd18e8-d9cc-4ea6-8889-5259c0d15c8b" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" 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" +LoggingExtras = "e6f89c97-d47a-5376-807f-9c37f3926c36" MuladdMacro = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" @@ -35,12 +36,13 @@ ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444" [compat] ArrayInterface = "1.1, 2.0" ChainRulesCore = "0.4, 0.5, 0.6, 0.7" +ConsoleProgressMonitor = "0.1" DataStructures = "0.17" DocStringExtensions = "0.8" FunctionWrappers = "1.0" IterativeSolvers = "0.8" IteratorInterfaceExtensions = "^0.1, ^1" -Juno = "0.8" +LoggingExtras = "0.4" MuladdMacro = "0.2.1" Parameters = "0.12.0" RecipesBase = "0.7.0, 0.8" diff --git a/src/DiffEqBase.jl b/src/DiffEqBase.jl index cdc7aaa1a..a0e957687 100644 --- a/src/DiffEqBase.jl +++ b/src/DiffEqBase.jl @@ -3,7 +3,9 @@ module DiffEqBase using RecipesBase, RecursiveArrayTools, Requires, TableTraits, IteratorInterfaceExtensions, TreeViews, IterativeSolvers, RecursiveFactorization, Distributed, ArrayInterface, - DataStructures, Logging, TerminalLoggers, Juno + DataStructures + +import Logging, LoggingExtras, TerminalLoggers, ConsoleProgressMonitor import ZygoteRules, ChainRulesCore diff --git a/src/solve.jl b/src/solve.jl index c7ac99775..3ae9ad541 100644 --- a/src/solve.jl +++ b/src/solve.jl @@ -33,9 +33,7 @@ function init(prob::DEProblem,args...;kwargs...) end end -function solve_call(_prob,args...;merge_callbacks = true, - logger = default_logger(), - kwargs...) +function solve_call(_prob,args...;merge_callbacks = true, kwargs...) if :kwargs ∈ propertynames(_prob) if merge_callbacks && haskey(_prob.kwargs,:callback) && haskey(kwargs, :callback) kwargs_temp = NamedTuple{Base.diff_names(Base._nt_names( @@ -43,13 +41,12 @@ function solve_call(_prob,args...;merge_callbacks = true, callbacks = NamedTuple{(:callback,)}( [DiffEqBase.CallbackSet(_prob.kwargs.callback, values(kwargs).callback )] ) kwargs = merge(kwargs_temp, callbacks) end - maybe_with_logger(logger) do - __solve(_prob,args...;_prob.kwargs...,kwargs...) - end - else - maybe_with_logger(logger) do - __solve(_prob,args...;kwargs...) - end + kwargs = merge(_prob.kwargs, kwargs) + end + + logger = get(kwargs, :progress, false) ? default_logger(Logging.current_logger()) : nothing + maybe_with_logger(logger) do + __solve(_prob,args...; kwargs...) end end diff --git a/src/utils.jl b/src/utils.jl index d0319768e..f34849b7c 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -256,5 +256,21 @@ timedepentdtmin(integrator::DEIntegrator) = timedepentdtmin(integrator.t, integr 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() +maybe_with_logger(f, logger) = logger === nothing ? f() : Logging.with_logger(f, logger) + +function default_logger(logger) + Logging.min_enabled_level(logger) ≤ Logging.LogLevel(-1) && return nothing + + if Sys.iswindows() || (isdefined(:Main, :IJulia) && Main.IJulia.inited) + progresslogger = ConsoleProgressMonitor.ProgressLogger() + else + progresslogger = TerminalLoggers.TerminalLogger() + end + + logger1 = LoggingExtras.EarlyFilteredLogger(progresslogger) do log + log.level == Logging.LogLevel(-1) + end + logger2 = LoggingExtras.MinLevelLogger(logger, Logging.LogLevel(0)) + + LoggingExtras.TeeLogger(logger1, logger2) +end \ No newline at end of file From 60e5b2451380425a435028393393ea0b7cbd8a9d Mon Sep 17 00:00:00 2001 From: David Widmann Date: Tue, 10 Mar 2020 07:53:47 +0100 Subject: [PATCH 2/3] Use ProgressLevel --- Project.toml | 2 ++ src/DiffEqBase.jl | 2 +- src/utils.jl | 8 +++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 742d68d49..6fd3b2ac4 100644 --- a/Project.toml +++ b/Project.toml @@ -19,6 +19,7 @@ LoggingExtras = "e6f89c97-d47a-5376-807f-9c37f3926c36" MuladdMacro = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" +ProgressLogging = "33c8b6b6-d38a-422a-b730-caa89a2f386c" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd" RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" @@ -45,6 +46,7 @@ IteratorInterfaceExtensions = "^0.1, ^1" LoggingExtras = "0.4" MuladdMacro = "0.2.1" Parameters = "0.12.0" +ProgressLogging = "0.1" RecipesBase = "0.7.0, 0.8" RecursiveArrayTools = "2" RecursiveFactorization = "0.1" diff --git a/src/DiffEqBase.jl b/src/DiffEqBase.jl index a0e957687..4f4f7c89d 100644 --- a/src/DiffEqBase.jl +++ b/src/DiffEqBase.jl @@ -5,7 +5,7 @@ using RecipesBase, RecursiveArrayTools, IterativeSolvers, RecursiveFactorization, Distributed, ArrayInterface, DataStructures -import Logging, LoggingExtras, TerminalLoggers, ConsoleProgressMonitor +import Logging, LoggingExtras, TerminalLoggers, ConsoleProgressMonitor, ProgressLogging import ZygoteRules, ChainRulesCore diff --git a/src/utils.jl b/src/utils.jl index f34849b7c..f3ca6bcea 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -259,7 +259,7 @@ timedepentdtmin(::Any, dtmin) = abs(dtmin) maybe_with_logger(f, logger) = logger === nothing ? f() : Logging.with_logger(f, logger) function default_logger(logger) - Logging.min_enabled_level(logger) ≤ Logging.LogLevel(-1) && return nothing + Logging.min_enabled_level(logger) ≤ ProgressLogging.ProgressLevel && return nothing if Sys.iswindows() || (isdefined(:Main, :IJulia) && Main.IJulia.inited) progresslogger = ConsoleProgressMonitor.ProgressLogger() @@ -268,9 +268,11 @@ function default_logger(logger) end logger1 = LoggingExtras.EarlyFilteredLogger(progresslogger) do log - log.level == Logging.LogLevel(-1) + log.level == ProgressLogging.ProgressLevel + end + logger2 = LoggingExtras.EarlyFilteredLogger(logger) do log + log.level != ProgressLogging.ProgressLevel end - logger2 = LoggingExtras.MinLevelLogger(logger, Logging.LogLevel(0)) LoggingExtras.TeeLogger(logger1, logger2) end \ No newline at end of file From 36368061c8b7e3b05effe1e987e251d7598e59f8 Mon Sep 17 00:00:00 2001 From: David Widmann Date: Tue, 10 Mar 2020 07:53:56 +0100 Subject: [PATCH 3/3] Fix typo --- src/utils.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils.jl b/src/utils.jl index f3ca6bcea..23d7403a5 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -261,7 +261,7 @@ maybe_with_logger(f, logger) = logger === nothing ? f() : Logging.with_logger(f, function default_logger(logger) Logging.min_enabled_level(logger) ≤ ProgressLogging.ProgressLevel && return nothing - if Sys.iswindows() || (isdefined(:Main, :IJulia) && Main.IJulia.inited) + if Sys.iswindows() || (isdefined(Main, :IJulia) && Main.IJulia.inited) progresslogger = ConsoleProgressMonitor.ProgressLogger() else progresslogger = TerminalLoggers.TerminalLogger()