pub enum SolverError {
Show 13 variants
Dispatch(String),
GlobalFailure(String),
IllConditioned {
kappa: f64,
},
IrlsFailure(String),
VarproNotSeparable,
VarproExprEdgesUnsupported,
VarproDatasetScopingUnsupported,
MalformedTiedTarget(String),
TiedTargetNodeMissing(String),
TiedTargetParamMissing(String),
UnrecognisedSolver(String),
UnrecognisedWeightFn(String),
InvalidEta(f64),
}Expand description
Errors originating in the solver layer.
Variants§
Dispatch(String)
A free-key or parameter lookup inside the dispatch path failed.
Typically caused by malformed graph input (a free_key that does not
match "node_id.param_name" format, or a node/parameter that the
compiled graph promised but the spec does not contain).
GlobalFailure(String)
The global optimiser (Differential Evolution) could not produce a finite-cost candidate, e.g. because all population members diverged.
IllConditioned
The post-fit covariance matrix is ill-conditioned (Cholesky failed or the condition number κ was above the safe threshold).
IrlsFailure(String)
An IRLS weight-update iteration encountered a numerical failure.
VarproNotSeparable
The graph is not separable but VarPro was explicitly requested.
VarproExprEdgesUnsupported
VarPro cannot honour tied parameters (from expr_edges or Parameter.expr).
VarproDatasetScopingUnsupported
VarPro cannot honour per-dataset (dataset_index) node scoping.
MalformedTiedTarget(String)
A tied target had a malformed "node.param" key.
TiedTargetNodeMissing(String)
A tied target referenced a node not present in the compiled graph.
TiedTargetParamMissing(String)
A tied target referenced a parameter not present on the named node.
UnrecognisedSolver(String)
FitOptionsSpec.solver did not match any recognised solver name.
Previously an unrecognised string (e.g. a typo like "lmm" or a
wrong-case "Trf") silently fell back to the LM default instead of
erroring, which could mask a misconfigured fit with a plausible-looking
but unintended result.
UnrecognisedWeightFn(String)
The <weight> suffix of an \"irls:<weight>\" solver string did not
match any recognised robust weight function.
Previously an unrecognised suffix (e.g. \"irls:buisquare\") silently
fell back to Huber instead of erroring.
InvalidEta(f64)
FitOptionsSpec.eta (the Dogleg / Newton-CG step-acceptance
threshold) was not finite and in [0.0, 0.25).
TrustRegionConfig::eta only shrinks the trust-region radius when
ρ < 0.25; an eta >= 0.25 opens a band in which a step is rejected
without shrinking the radius, so the driver can spin to max_nfev
instead of failing cleanly. The driver itself only guards this with a
debug_assert!, which compiles out of release builds, so this is the
check that actually enforces the bound for callers that reach the
Rust core directly (the JSON fit entrypoint, not just the Pydantic
FitOptions validator).
Trait Implementations§
Source§impl Debug for SolverError
impl Debug for SolverError
Source§impl Display for SolverError
impl Display for SolverError
Source§impl Error for SolverError
impl Error for SolverError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<SolverError> for CoreError
Map SolverError to the workspace-wide CoreError.
impl From<SolverError> for CoreError
Map SolverError to the workspace-wide CoreError.
Symmetric to From<GraphError> for CoreError in the graph crate: the
solver produces typed SolverError variants internally; the PyO3 boundary
layer (spectrafit-core) and the rest of the workspace consume
CoreError, so this conversion lets ? flatten without losing the
Display message.
Source§fn from(value: SolverError) -> Self
fn from(value: SolverError) -> Self
Auto Trait Implementations§
impl Freeze for SolverError
impl RefUnwindSafe for SolverError
impl Send for SolverError
impl Sync for SolverError
impl Unpin for SolverError
impl UnsafeUnpin for SolverError
impl UnwindSafe for SolverError
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.