Manopt v0.6.4
As an overarching scheme of this release, the single functions in an objective become more independent; their wrapping happens automatically and the objective gets – in turn – a bit more lightweight and has “less cases to handle”.
Added
- DocumenterCodeBlocks.jl plugin added to the documentation
- DocumenterLandingPage.jl enhances the start page with a short teaser for the package now.
- Added a Developer Guide section in the documentation
ManoptKeywordErroris now exported, since it is the error thrown when the:KeywordsErrorModeparameter is set to"error"and a solver receives a keyword it does not accept.
Changed
- All
AbstractManifoldObjectiveshad an evaluation type as first parameter.
This has been refactored “down to” the function level, and the functions in the objective are
now all expected to be in-place. This allows to combine allocating and in-place variants.
The constructors, however, have not changed. (#630) - the file structure has been changed and the
plan/folder has been split with the following motivation- all abstract types and generic implementation and documentation of functions has been moved to
base/.
This is also reflected in the documentation, where the newbase/files reflect a developer documentation that additionally includes descriptions of the design choices - concrete types and their implementations have either been used to the specific solver where they are used / defined,
especially for solver states, or now reside in acommons/folder, when they are of general use for multiple solvers.
This structure is also reflected in the documentation.
- all abstract types and generic implementation and documentation of functions has been moved to
- a few internal abstract super types have been renamed for the new scheme that puts more focus on functions, to stay more consistent. The word “functor” is now avoided for structs that actually just represent functions.
AbstractConstrainedFunctorhas been renamed toAbstractConstrainedFunctionAbstractConstrainedSlackFunctorhas been renamed toAbstractConstrainedSlackFunction
get_gradient_functionandget_hessian_functionare unified to always return an allocating variant by default, but can also return an in-place variant now based on anevaluation=keyword. While this is formally breaking, since the default behaviour changed, both functions are internal and should also only be used withinManopt.jl.- objectives now also accept a
p=keyword to automatically “wrap” functions that operate on immutable variables – internallyManopt.jlexpects points and tangent vectors to be mutable.
Fixed
has_convergedproduced inconsistent behaviours for more complex stopping criteria. (#631)
This has been fixed and the function works now consistently for bothStopWhenAnyandStopWhenAll. (#630)- both in-place subsolver for the convex bundle and proximal bundle method would fail to update the result in case the size of the vector changes.
this is now adapted by resizing the (in-place, passed down) result vector accordingly for these subsolvers. - the cached and the counting objective dispatched the inequality constraint length onto
equality_constraints_length. Cache sizes and counters were therefore wrong whenever a problem
has different numbers of equality and inequality constraints. - the default of
start_enforcing_wolfe_conditions_at_bracketing_iterationinHagerZhangLinesearch
was chosen by testinginitial_guess isa ConstantStepsize, which can never hold, since
ConstantInitialGuessis not aStepsize. The default was hence always1instead of the
intended2for a constant initial guess. - the
DefaultManifoldfallback of the vector norm used in the Hager-Zhang initial guess
computed the norm of the point instead of the norm of the tangent vector. - several
show/status_summarymethods errored or printed wrong content:StopWhenEntryChangeLess
andStopWhenRepeatedthrew on somecontext=values,StopWhenLagrangeMultiplierLessprinted
Base.namesinstead of its own field, the two Wolfe-Powell line searches printed the retraction
method under “vector transport method”, and the objective decorators dropped thecontext=
keyword instead of passing it on. - a larger number of docstrings were corrected, where signatures, field names, or supertypes had
drifted from the implementation, together with formula and markup errors.
Removed
- The two evaluation types of
ParentEvaluationTypeandAllocatingInplaceEvaluationwere never used anywhere, so removing them is considered nonbreaking. Internally this distinction is now anyways handled on a function level, so that neither of the cases can appear anyways. Neither of these types was ever exported.
Merged pull requests:
- Refactor in-place dispatch route – improve developer docs (#630) (@kellertuer)
- Bump crate-ci/typos from 1.48.0 to 1.49.0 (#633) (@dependabot[bot])
Closed issues: