pub enum SeedOutcome {
Installed,
NoSlot,
Incompatible,
}Expand description
Outcome of OuterObjective::seed_inner_state.
Distinguishes two non-error outcomes that callers handle differently:
SeedOutcome::Installed— the objective owns an inner-β slot and the provided β has been stored there. The nexteval*will warm-start from this β.SeedOutcome::NoSlot— the objective has no inner-β slot at all. The provided β is silently discarded. This is the contract reply for objectives whose inner iterate is conceptually empty (e.g. line-search bridges, screening proxies, fixed-spec objectives).
Genuine seeding failures (wrong dimension when a slot exists, internal
allocation faults, …) are reported via Err(EstimationError).
The two non-error variants exist because the two real callers want opposite behavior on the no-slot path:
- The outer cache warm-start path (
OuterProblem::run) reads a(ρ, β)pair from disk; if the objective has no β slot it must log loudly (“β-bearing checkpoint silently degraded to ρ-only resume”) so cache provenance is auditable. - The continuation walk (
prime_outer_seed) forwardsinner_beta_hintfrom the previous step; if the objective has no β slot the walk simply proceeds cold — no log, no error.
Encoding the distinction in the return type lets each caller branch on
the variant without inspecting error message strings (the previous
brittle approach, see git history for is_no_hook in continuation.rs).
Variants§
Installed
The objective installed the provided β into its inner-β slot.
NoSlot
The objective has no inner-β slot; the β was discarded.
Incompatible
The objective owns an inner-β slot, but the provided β is structurally incompatible with this fit’s inner block layout (its length does not match the per-block coefficient widths). The β was discarded and the fit resumes ρ-only.
This is the load-time reply for a row-relaxed cross-fit seed
(the cache_seed_key prefix channel): two folds of the same model
share an ρ-dim, so the cached ρ transfers, but the realized basis
rank — hence the inner β length — is row-population dependent and
legitimately differs across folds (the LOSO p=37-vs-p=85 case).
A length-mismatched seed β is therefore NOT an error: cross-length
β transfer is delegated to the gauge-projected FitArtifact
channel, which least-squares re-expresses the parent’s raw β into
this fold’s reduced subspace. Reporting Incompatible here keeps
the (correct) ρ seed and avoids a spurious full cold-start.
Trait Implementations§
Source§impl Clone for SeedOutcome
impl Clone for SeedOutcome
Source§fn clone(&self) -> SeedOutcome
fn clone(&self) -> SeedOutcome
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for SeedOutcome
Source§impl Debug for SeedOutcome
impl Debug for SeedOutcome
impl Eq for SeedOutcome
Source§impl PartialEq for SeedOutcome
impl PartialEq for SeedOutcome
Source§fn eq(&self, other: &SeedOutcome) -> bool
fn eq(&self, other: &SeedOutcome) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for SeedOutcome
Auto Trait Implementations§
impl Freeze for SeedOutcome
impl RefUnwindSafe for SeedOutcome
impl Send for SeedOutcome
impl Sync for SeedOutcome
impl Unpin for SeedOutcome
impl UnsafeUnpin for SeedOutcome
impl UnwindSafe for SeedOutcome
Blanket Implementations§
impl<T> Allocation for T
impl<T> Boilerplate for T
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
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>
self from the equivalent element of its
superset. Read moreSource§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).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.