Skip to main content

CurvatureEvidence

Enum CurvatureEvidence 

Source
pub enum CurvatureEvidence {
    Measured {
        psd: bool,
    },
    NotSpent,
    NotAvailable,
    NoEstimand,
    CriterionContradicted,
}
Expand description

What curvature evidence a certificate actually has (#2561).

This was Option<bool>, and its None carried FOUR structurally different meanings that OuterCriterionCertificate::curvature_admissible accepted alike:

  1. a multi-start screening pass deliberately declined to spend the order-four derivative ladder (Self::NotSpent);
  2. the route exposes no analytic Hessian at all (Self::NotAvailable);
  3. the EFS/fixed-point route, which has none by construction (same);
  4. there is no outer estimand to have curvature (Self::NoEstimand).

Case 1 is deliberate and documented — screening is a first-order gate, and “the one order-four evaluation belongs to the winner”. But that design also promises the winner’s verdict is the one that mints, and while None meant all four things at once, nothing could check it: a Mint-fidelity refusal to measure was byte-identical to a screening pass that chose not to. Naming the states makes that promise assertable.

Acceptance is unchanged. Only Self::Measured with psd: false is a negative verdict; every other state passes, exactly as != Some(false) did.

§Serialized form

Serializes as the legacy Option<bool> under the legacy key, because hessian_psd is a published Python contract (gamfit/_summary.py) whose domain is null | true | false, and because stored model bytes carry this field with no version tag. The round trip is therefore deliberately LOSSY: NotSpent and NoEstimand both reload as NotAvailable. That is sound because the three are acceptance-identical, and screening certificates are never persisted — only the winner mints.

Variants§

§

Measured

A Hessian existed at the certified point and was tested.

Fields

§psd: bool
§

NotSpent

A screening pass declined to spend the order-four ladder. A certificate minted at CertificationFidelity::Mint must never carry this.

§

NotAvailable

The route exposes no analytic Hessian, so there was nothing to test.

§

NoEstimand

A zero-dimensional outer problem: no estimand, so no curvature exists to be admissible or otherwise. Distinct from Self::NotAvailable, which means a curvature question existed and could not be answered.

§

CriterionContradicted

A Hessian was measured, reported a negative direction, and the criterion itself was then asked about that direction and did not fall (#2612).

The escape steps ρ ± αv along the reported minimum eigenvector, in both signs, from one e-fold down to the step at which the quadratic model’s own predicted decrease ½|λ_min|α² reaches the criterion’s resolution. Below that step the claim predicts nothing the criterion can represent, so that ladder covers the claim’s WHOLE falsifiable range. A direction that lowers the objective nowhere in it is not a descent direction of this criterion, whatever the matrix says.

This is a statement about the MATRIX, not about the point, and it is the reason the second-order conjunct does not refuse here: refusing would spend evidence the criterion has just contradicted. It is deliberately NOT Self::Measured with psd: true — nothing established that the point is a minimum either; what was established is that this Hessian’s negative direction has no operational content.

Reachable only where an analytic Hessian exists AND the objective can be re-evaluated at trial points, which is exactly where the escape runs.

Serializes as null under the legacy hessian_psd key and reloads as Self::NotAvailable — the same deliberate lossiness the module doc already records for NotSpent/NoEstimand, and sound for the same reason: the four are acceptance-identical, and the adjudication is a statement about a run, not a property of a stored model.

Implementations§

Source§

impl CurvatureEvidence

Source

pub fn psd(self) -> Option<bool>

The raw PSD verdict when one was measured, None otherwise — the legacy projection, and what the published hessian_psd surface shows.

Source

pub fn was_measured(self) -> bool

Whether a curvature question was actually answered here.

Self::CriterionContradicted answers false: a Hessian was measured there, but its verdict was withdrawn by the criterion, so no curvature ANSWER survives. Reporting true would let a consumer that asked for a real second-order guarantee read a withdrawn verdict as a delivered one, which is the #2578 conflation one variant further along.

Source

pub fn from_measurement(psd: Option<bool>) -> CurvatureEvidence

Build from a raw optional measurement: Some was measured, None means the route had no analytic Hessian to test. Sites that mean Self::NotSpent or Self::NoEstimand must say so explicitly — that is the point of the type.

Trait Implementations§

Source§

impl Clone for CurvatureEvidence

Source§

fn clone(&self) -> CurvatureEvidence

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for CurvatureEvidence

Source§

impl Debug for CurvatureEvidence

Source§

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

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

impl<'de> Deserialize<'de> for CurvatureEvidence

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<CurvatureEvidence, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for CurvatureEvidence

Source§

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

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

impl Eq for CurvatureEvidence

Source§

impl From<Option<bool>> for CurvatureEvidence

Source§

fn from(psd: Option<bool>) -> CurvatureEvidence

Converts to this type from the input type.
Source§

impl PartialEq for CurvatureEvidence

Source§

fn eq(&self, other: &CurvatureEvidence) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for CurvatureEvidence

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for CurvatureEvidence

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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> Boilerplate for T
where T: Copy + Send + Sync + Debug + PartialEq + 'static,

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

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

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

Source§

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

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

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

Source§

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

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,

Source§

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

Source§

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

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

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

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

fn from_subset(element: &SS) -> SP

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

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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 = !

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

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

Source§

fn vzip(self) -> V