Skip to main content

SolverError

Enum SolverError 

Source
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).

Fields

§kappa: f64

The condition number κ = σ_max / σ_min of JᵀJ at the solution.

§

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

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for SolverError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for SolverError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

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

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> ByRef<T> for T

§

fn by_ref(&self) -> &T

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> DistributionExt for T
where T: ?Sized,

§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V