#[non_exhaustive]pub enum SolverDiagnostics {
Lbfgs(LbfgsDiagnostics),
Newton(NewtonDiagnostics),
TrustRegion(TrustRegionDiagnostics),
Other,
}Expand description
Per-solver diagnostic counters.
Each variant carries the counters that solver tracks. The enum shape (rather than a flat struct with optional fields) makes it impossible to confuse “this solver doesn’t track this counter” with “this counter genuinely observed zero”.
Marked #[non_exhaustive] so future solver additions don’t keep
breaking downstream match exhaustiveness.
§Example
ⓘ
use echidna_optim::{lbfgs, LbfgsConfig, SolverDiagnostics, TerminationReason};
let result = lbfgs(&mut obj, &x0, &LbfgsConfig::default());
if let SolverDiagnostics::Lbfgs(d) = &result.diagnostics {
if result.termination == TerminationReason::GradientNorm
&& d.pairs_curvature_rejected > d.pairs_accepted
{
eprintln!("L-BFGS converged but ran mostly as steepest descent — \
consider a different solver or rescale the problem");
}
}Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Lbfgs(LbfgsDiagnostics)
L-BFGS-specific counters.
Newton(NewtonDiagnostics)
Newton-specific counters.
TrustRegion(TrustRegionDiagnostics)
Trust-region-specific counters.
Other
Fallback for solver paths that don’t yet emit specific counters.
Implementations§
Source§impl SolverDiagnostics
impl SolverDiagnostics
Sourcepub fn as_lbfgs(&self) -> Option<&LbfgsDiagnostics>
pub fn as_lbfgs(&self) -> Option<&LbfgsDiagnostics>
Returns the L-BFGS counters if this result came from lbfgs.
Sourcepub fn as_newton(&self) -> Option<&NewtonDiagnostics>
pub fn as_newton(&self) -> Option<&NewtonDiagnostics>
Returns the Newton counters if this result came from newton.
Sourcepub fn as_trust_region(&self) -> Option<&TrustRegionDiagnostics>
pub fn as_trust_region(&self) -> Option<&TrustRegionDiagnostics>
Returns the trust-region counters if this result came from trust_region.
Trait Implementations§
Source§impl Clone for SolverDiagnostics
impl Clone for SolverDiagnostics
Source§fn clone(&self) -> SolverDiagnostics
fn clone(&self) -> SolverDiagnostics
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for SolverDiagnostics
impl RefUnwindSafe for SolverDiagnostics
impl Send for SolverDiagnostics
impl Sync for SolverDiagnostics
impl Unpin for SolverDiagnostics
impl UnsafeUnpin for SolverDiagnostics
impl UnwindSafe for SolverDiagnostics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.