The Debug decorator for solver states
Manopt.DebugAction — Type
DebugActionA DebugAction is a small functor to print/issue debug output. The usual call is given by (p::AbstractManoptProblem, s::AbstractManoptSolverState, k) -> s, where i is the current iterate.
By convention i=0 is interpreted as "For Initialization only," only debug info that prints initialization reacts, i<0 triggers updates of variables internally but does not trigger any output.
Fields (assumed by subtypes to exist)
printmethod to perform the actual print. Can for example be set to a file export,
or to @info. The default is the print function on the default Base.stdout.
Manopt.DebugEvery — Type
DebugEvery <: DebugActionevaluate and print debug only every $k$th iteration. Otherwise no print is performed. Whether internal variables are updates is determined by always_update.
This method does not perform any print itself but relies on it's children's print.
It also sets the sub solvers active parameter, see |DebugWhenActive}(#ref). Here, the activation_offset can be used to specify whether it refers to this iteration, the ith, when this call is before the iteration, then the offset should be 0, for the next iteration, that is if this is called after an iteration, it has to be set to 1. Since usual debug is happening after the iteration, 1 is the default.
Constructor
DebugEvery(d::DebugAction, every=1, always_update=true, activation_offset=1)Manopt.DebugGroup — Type
DebugGroup <: DebugActiongroup a set of DebugActions into one action, where the internal prints are removed by default and the resulting strings are concatenated
Constructor
DebugGroup(g)construct a group consisting of an Array of DebugActions g, that are evaluated en bloque; the method does not perform any print itself, but relies on the internal prints. It still concatenates the result and returns the complete string
Manopt.DebugSolverState — Type
DebugSolverState <: AbstractManoptSolverStateThe debug state appends debug to any state, they act as a decorator pattern. Internally a dictionary is kept that stores a DebugAction for several occasions using a Symbol as reference.
The original options can still be accessed using the get_state function.
Fields
options: the options that are extended by debug informationdebug_dictionary: aDict{Symbol,DebugAction}to keep track of Debug for different actions
Constructors
DebugSolverState(o,dA)construct debug decorated options, where dD can be
- a
DebugAction, then it is stored within the dictionary at:Iteration - an
ArrayofDebugActions. - a
Dict{Symbol,DebugAction}. - an Array of Symbols, String and an Int for the
DebugFactory
The solver implementation
Manopt.initialize_solver! — Method
initialize_solver!(amp::AbstractManoptProblem, dss::DebugSolverState)Extend the initialization of the solver by a hook to run the DebugAction that was added to the :Start entry of the debug lists. All others are triggered (with iteration number 0) to trigger possible resets
Manopt.step_solver! — Method
step_solver!(amp::AbstractManoptProblem, dss::DebugSolverState, k)Extend the ith step of the solver by a hook to run debug prints, that were added to the :BeforeIteration and :Iteration entries of the debug lists.
Manopt.stop_solver! — Method
stop_solver!(amp::AbstractManoptProblem, dss::DebugSolverState, k)Extend the stop_solver!, whether to stop the solver by a hook to run debug, that were added to the :Stop entry of the debug lists.
Internal functions
Manopt.set_parameter! — Method
set_parameter!(ams::DebugSolverState, ::Val{:Debug}, args...)Set certain values specified by args... into the elements of the debug_dictionary
Further reading
For concrete debug actions available, see the common debugs.