pub enum TimeBlockMonotonicity {
EnforcedByCoordinateCone,
EnforcedByRowConstraint,
StructuralISpline,
}Expand description
How a time block’s parameterization enforces the derivative-guard
monotonicity q'(t) ≥ guard.
The constraint set fed to the inner active-set / KKT machinery depends on
the variant; consuming families dispatch on this to choose the right
constraint shape and to refuse a mismatched parameterization (e.g.
survival_marginal_slope cannot ride a coordinate-cone-only basis
without re-introducing the phantom-multiplier bug it solved with the
row-wise representation; survival_location_scale cannot ride a
row-wise representation without making its reduced KKT system
rank-deficient on the cone basis).
Variants§
EnforcedByCoordinateCone
The time block’s coefficients are constrained by a per-coordinate
cone β_j ≥ 0 (with appropriate offsets handled by the family).
Used by location-scale / latent paths whose bases produce a
non-negative derivative whenever the cone holds.
EnforcedByRowConstraint
The time block’s coefficients are constrained by row-wise
D β + o ≥ guard over every observation row; needed when the
basis admits negative-derivative directions that no coordinate
cone can encode without leaving phantom KKT multipliers when a
row binds. Used by survival_marginal_slope under the additive
base.
StructuralISpline
The base is a structurally-monotone parameterization (e.g.
q'(t) = guard + I(t)·γ with γ ≥ 0). Monotonicity holds
pointwise from the cone; the family treats this exactly as a
coordinate cone for constraint generation but the geometric
claim is stronger and is recorded here for diagnostics and for
future fast paths (e.g. skipping per-row validation).
Implementations§
Source§impl TimeBlockMonotonicity
impl TimeBlockMonotonicity
Sourcepub fn is_coordinate_cone(self) -> bool
pub fn is_coordinate_cone(self) -> bool
True when the variant can be enforced by a coordinate cone alone
(no row-wise constraints required). Both EnforcedByCoordinateCone
and StructuralISpline satisfy this; only EnforcedByRowConstraint
requires the row-wise D β ≥ b constraint matrix.
Sourcepub fn requires_row_constraints(self) -> bool
pub fn requires_row_constraints(self) -> bool
True when row-wise D β + o ≥ guard constraints must be emitted
for the inner active-set/KKT machinery to capture binding
multipliers correctly.
Trait Implementations§
Source§impl Clone for TimeBlockMonotonicity
impl Clone for TimeBlockMonotonicity
Source§fn clone(&self) -> TimeBlockMonotonicity
fn clone(&self) -> TimeBlockMonotonicity
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 TimeBlockMonotonicity
Source§impl Debug for TimeBlockMonotonicity
impl Debug for TimeBlockMonotonicity
impl Eq for TimeBlockMonotonicity
Source§impl PartialEq for TimeBlockMonotonicity
impl PartialEq for TimeBlockMonotonicity
Source§fn eq(&self, other: &TimeBlockMonotonicity) -> bool
fn eq(&self, other: &TimeBlockMonotonicity) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for TimeBlockMonotonicity
Auto Trait Implementations§
impl Freeze for TimeBlockMonotonicity
impl RefUnwindSafe for TimeBlockMonotonicity
impl Send for TimeBlockMonotonicity
impl Sync for TimeBlockMonotonicity
impl Unpin for TimeBlockMonotonicity
impl UnsafeUnpin for TimeBlockMonotonicity
impl UnwindSafe for TimeBlockMonotonicity
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.